07-Go设计模式-适配模式

适配模式

示例代码
/*
适配器模式: 将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。


适配器模式中的角色和职责
Target(目标抽象类):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类。
Adapter(适配器类):适配器可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配,适配器类是适配器模式的核心,
在对象适配器中,它通过继承Target并关联一个Adaptee对象使二者产生联系。
Adaptee(适配者类):适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体类,
包含了客户希望使用的业务方法,在某些情况下可能没有适配者类的源代码。
*/

package _2_adaptation_pattern

import "fmt"

//适配的目标
type V5 interface {
	Use5V()
}

//业务类,依赖v5接口
type Phone struct {
	v V5
}

func NewPhone(v V5) *Phone {
	return &Phone{
		v,
	}
}

func (p *Phone) Charge() {
	fmt.Println("Phone进行充电...")
	p.v.Use5V()
}

//被适配的角色,适配者
type V220 struct{}

func (v *V220) Use220V() {
	fmt.Println("使用220V的电压")
}

//电源适配器
type Adapter struct {
	v220 *V220
}

func (a *Adapter) Use5V() {
	fmt.Println("使用适配器进行充电")

	//调用适配者的方法
	a.v220.Use220V()
}

func NewAdapter(v220 *V220) *Adapter {
	return &Adapter{
		v220,
	}
}

测试代码
package _2_adaptation_pattern

import "testing"

func TestPhone(t *testing.T) {
	iphone := NewPhone(NewAdapter(new(V220)))

	iphone.Charge()
}

posted @ 2022-10-08 15:45  李成果  阅读(26)  评论(0编辑  收藏  举报