最近复习设计模式
拜读谭勇德的<<设计模式就该这样学>>
本系列笔记拟采用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