適配器模式是把一個(gè)類的接口變換為另一個(gè)類所期望的接口趁尼,使得原本因?yàn)榻涌诓黄ヅ涠鵁o法一起工作的類,變的可以正常調(diào)用
適配器別名有:Wrapper,Adapter茵瘾,它是一種結(jié)構(gòu)型設(shè)計(jì)模式,通過擴(kuò)展原本不適配的類來滿足特定的需求
應(yīng)用場景
在計(jì)算機(jī)當(dāng)中咐鹤,有網(wǎng)卡驅(qū)動(dòng)和顯卡驅(qū)動(dòng)等等拗秘,那這些驅(qū)動(dòng)有什么作用呢?
作用就是為了能夠適配操作系統(tǒng)祈惶;計(jì)算機(jī)發(fā)展過程中出現(xiàn)了越來越多的硬件廠商雕旨,比如:intel扮匠,amd,三星凡涩,華為等等棒搜,不同的廠商意味著不同的實(shí)現(xiàn)細(xì)節(jié);
為了能夠統(tǒng)一這種不斷變化的局面活箕,操作系統(tǒng)為不同的硬件提供了統(tǒng)一了接口力麸,這些接口就是適配器,比如:網(wǎng)卡有網(wǎng)卡適配器育韩,顯卡有顯卡適配器克蚂,而操作系統(tǒng)只是這些適配器通信,而不會管每個(gè)硬件具體實(shí)現(xiàn)細(xì)節(jié)筋讨;
而響應(yīng)的各個(gè)硬件廠商也只需要為其出廠的對應(yīng)的硬件實(shí)現(xiàn)相應(yīng)的適配器就好了埃叭,實(shí)現(xiàn)的這些適配器就是所謂的驅(qū)動(dòng);這樣的話版仔,同一個(gè)操作系統(tǒng)就可以對應(yīng)不同廠商的硬件了游盲,只要該廠商提供了對應(yīng)的適配器即可
類圖和示例代碼
示例代碼:
package main
import "fmt"
type Target interface {
Print(s string)
}
type Adapter struct {
at *adaptee
}
func (a *Adapter) Print(msg string) {
a.at.PrintMsg(msg)
}
type adaptee struct {
}
func (a *adaptee) PrintMsg(msg string) {
fmt.Println(msg)
}
func NewAdapter() *Adapter {
return &Adapter{at:&adaptee{}}
}
func main() {
a := NewAdapter()
a.Print("this is adapter pattern")
}
詳細(xì)代碼,可以參考 github
優(yōu)點(diǎn)
-
擴(kuò)展性
在原來的系統(tǒng)中進(jìn)行了擴(kuò)展蛮粮,讓其可以適配新的系統(tǒng)益缎,并且不更改原系統(tǒng)的代碼
-
復(fù)用性
兩個(gè)系統(tǒng)接口不符合,但是功能相同然想,通過適配器只需要進(jìn)行簡單的變化就可以復(fù)用了莺奔,不需要再將已有的功能再實(shí)現(xiàn)一遍
缺點(diǎn)
-
復(fù)雜度
為了適配現(xiàn)有的接口,需要通過增加新的類型進(jìn)行變換