
概述
? 適配器其實非常好理解,放到生活中來,我們身邊處處都有這樣的例子,最常見的是用的比較多的各種轉接線(如:USB 轉 Type-C),有了這個“適配器”,我們就能夠將電腦和手機等設備相進行連接,而不需要改動電腦/手機的原有接口。
示例
? 回到編程的世界中,假設我們的某個程序一直依賴一個很久遠的接口 OldBusinessInterface
,這個時候由于業(yè)務需求,需要使用到比較新的接口 NewBusinessInterface
,由于歷史原因將不對舊的代碼進行修改 ,因此目前的方案是將使用 適配器模式 去讓 NewBusinessInterface
去適配 OldBusinessInterface
。
> 代碼在線運行 <
package main
import "fmt"
// OldBusinessInterface 這是舊的接口
type OldBusinessInterface interface {
OldBusinessMethodA(str string) int
OldBusinessMethodB()
}
// OldBusiness 這是舊的業(yè)務類,實現了舊的接口
type OldBusiness struct {
}
func (o *OldBusiness) OldBusinessMethodA(str string) int {
fmt.Println("OldBusinessMethodA is called")
return len(str)
}
func (o *OldBusiness) OldBusinessMethodB() {
fmt.Println("OldBusinessMethodB is called")
}
// NewBusinessInterface 這是新的接口
type NewBusinessInterface interface {
NewBusinessMethodA(str string) int
}
// NewBusiness 這是新的業(yè)務類,實現了新的接口
type NewBusiness struct {
}
func (n *NewBusiness) NewBusinessMethodA(str string) int {
fmt.Println("NewBusinessMethodA is called")
return len(str)
}
// OldBusinessMethod 這是舊的業(yè)務方法,依賴于舊的接口,但是新的業(yè)務類沒有實現舊的接口
func OldBusinessMethod(a OldBusinessInterface) {
a.OldBusinessMethodA("hello")
}
// Adapter 這是適配器,實現了舊的接口,但是依賴于新的接口,這樣就可以在舊的業(yè)務方法中使用新的業(yè)務類了
type Adapter struct {
NewBusinessInterface
}
func (a *Adapter) OldBusinessMethodA(str string) int {
fmt.Println("[Adapter] OldBusinessMethodA is called")
return a.NewBusinessMethodA(str)
}
func (a *Adapter) OldBusinessMethodB() {
fmt.Println("[Adapter] OldBusinessMethodB is called")
}
func main() {
// 舊的使用姿勢
OldBusinessMethod(&OldBusiness{})
fmt.Println("------------------")
// 使用適配器,可以在舊的業(yè)務方法中使用新的業(yè)務類了
OldBusinessMethod(&Adapter{&NewBusiness{}})
}
運行結果:
OldBusinessMethodA is called
------------------
[Adapter] OldBusinessMethodA is called
NewBusinessMethodA is called
? 通過適配器,我們能夠將 B 接口變成 A 接口,通過這個方式,我們不需要再重新寫一個新的實現類,而是只需要增加一個 適配器,這種感覺就是:你現在只有一個安卓充電線,但是你的手機是 Type-C
的接口,這個時候你只需要通過一個 轉接線 就可以讓 Type-C
接口的手機使用安卓充電線,而不用重新再買一個 Type-C
接口的充電器,這確實能夠方便很多,當然,重新買一個充電器也并不是說不可取,這需要結合實際場景考慮各方面的因素來選擇最合適的方案。
適配器的種類
? 實際上,適配器有“兩種”:對象適配器
和 類適配器
。
-
對象適配器
-
類適配器
?
? 其實本質上只是適配的目標不同而已,我們剛才的代碼是針對接口而做的適配,其實就是對象適配器,對于類適配器,其實就是針對類型進行適配(在 Java 中,就是對 Class 進行的適配),使用此方式的前提條件是 編程語言支持多繼承(如圖,Adapter
繼承了目標類和待適配的類)。
小結
-
模式定義
將一個類的接口,轉換成客戶期望的另一個接口。適配器讓原本接口不兼容的類可以合作無間。
? 總結以上的內容,說白了,適配器其實就是一個中間層,可以讓原本不兼容的接口轉換成目標接口,最核心的是 “轉換” 二字。如果你了解過外觀模式和裝飾模式,你可能會對他們三個感到有些困惑,分不清他們的差異,不用擔心,我在之后的文章會對他們三個的差異做出解釋。文章來源:http://www.zghlxwxcb.cn/news/detail-688430.html
? 以上便是本篇的全部內容了,如果內容存在又問題的地方歡迎指點。文章來源地址http://www.zghlxwxcb.cn/news/detail-688430.html
到了這里,關于設計模式大白話——適配器模式的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!