最近複習設計模式
拜讀譚勇德的<<設計模式就該這樣學>>
本系列筆記擬採用golang練習之golang
適配器模式(Adapter Pattern)又叫做變壓器模式,它的功能是將一個類的接口變成客戶端所指望的另外一種接口,從而使本來因接口不匹配而致使沒法在一塊兒工做的兩個類可以一塊兒工做,屬於結構型設計模式。
_設計模式
adapter_pattern_test.gooop
package structural_patterns import ( "learning/gooop/structural_patterns/adapter" "testing" ) func Test_AdapterPattern(t *testing.T) { factory := adapter.SpecialThermometerFactory thermometer := factory.Create("This is some configuration") t.Logf("centigrade = %v", thermometer.Centigrade()) }
$ go test -v adapter_pattern_test.go === RUN Test_AdapterPattern adapter_pattern_test.go:11: centigrade = 26.5 --- PASS: Test_AdapterPattern (0.00s) PASS ok command-line-arguments 0.003s
現有系統的溫度計接口, 溫度單位爲攝氏度.單元測試
package adapter // 現有系統的溫度計接口, 攝氏度 type IThermometer interface { Centigrade() float64 }
現有系統的溫度計工廠接口.測試
package adapter type IThermometerFactory interface { Create(config string) IThermometer }
廠家sdk提供的溫度計接口, 溫度單位爲華氏度設計
package adapter // 新接入的溫度計, 華氏度 type ISpecialThermometer interface { Fahrenheit() float64 }
廠家sdk提供的溫度計實現code
package adapter type tMockSpecialThermometer struct { mAddress string } func newMockSpecialThermometer(address string) ISpecialThermometer { return &tMockSpecialThermometer{ address, } } func (me *tMockSpecialThermometer) Fahrenheit() float64 { return 79.7 }
根據適配器模式, 實現的溫度計適配器, 爲新溫度計適配現有系統的接口接口
package adapter type tMockSpecialAdapter struct { mOrigin ISpecialThermometer } func newSpecialAdapter(origin ISpecialThermometer) IThermometer { return &tMockSpecialAdapter{ origin, } } func (me *tMockSpecialAdapter) Centigrade() float64 { return (me.mOrigin.Fahrenheit() - 32) * 5 / 9 }
新溫度計的工廠類, 實現IThermometerFactory接口ci
package adapter type tMockSpecialFactory struct { } func newMockSpecialFactory() IThermometerFactory { return &tMockSpecialFactory{} } func (me *tMockSpecialFactory) Create(config string) IThermometer { t := newMockSpecialThermometer(me.parseAddress(config)) return newSpecialAdapter(t) } func (me *tMockSpecialFactory) parseAddress(config string) string { return "http://localhost:8080" } var SpecialThermometerFactory IThermometerFactory = newMockSpecialFactory()
適配器模式的優勢
(1)能提升類的透明性和複用,但現有的類複用不須要改變。
(2)適配器類和原角色類解耦,提升程序的擴展性。
(3)在不少業務場景中符合開閉原則。
適配器模式的缺點
(1)適配器編寫過程須要結合業務場景全面考慮,可能會增長系統的複雜性。
(2)增長代碼閱讀難度,下降代碼可讀性,過多使用適配器會使系統代碼變得凌亂。
_
(end)string