适配器模式(Adapter Design Pattern)
适配器模式用于将一个类的接口转换为调用方希望的另外一个接口,使得原本不兼容的接口也可以一起工作。
举个常见的例子:如果去美国旅游,那随身携带的国内的电器插头就无法使用,因为国内和美国的电压标准不同,这是就需要一个适配器。
在设计模式中,适配器模式也是类似的,当被调用者的接口已经定型(可能是某正在运行的服务),而调用者定义的接口又不兼容被调用者提供的接口,这时就可以用一个适配器提供接口转换功能。
代码示例
package adapter
import "fmt"
//美国供电口
type AmericaPower struct {
}
func (a AmericaPower) Power() {
fmt.Println("美国电源供电")
}
type ChinaPlug struct{}
func (c ChinaPlug) Charge() {
fmt.Println("中式插口充电")
}
type PowerAdapter struct {
power *AmericaPower
}
func (a *PowerAdapter) SetPower(i *AmericaPower) {
a.power = i
}
func (a PowerAdapter) Charge(i *ChinaPlug) {
a.power.Power()
fmt.Println("电压转换...")
i.Charge()
}
调用:
adapter := &PowerAdapter{}
adapter.SetPower(&AmericaPower{})
adapter.Charge(&ChinaPlug{})
// Output:
// 美国电源供电
// 电压转换...
// 中式插口充电