建设e购物网站三十分钟激励视频素材
文章目录
- 1. 概念
 - 1.1 角色
 - 1.2 应用场景
 - 1.2 类图
 
- 2. 代码示例
 - 2.1 设计
 - 2.2 代码
 - 2.3 示例类图
 
1. 概念
定义一个适配器,帮助原本不能实现接口的类“实现”该接口
1.1 角色
目标(Target):客户端调用的目标接口
 被适配者(Adaptee):已经存在且运行良好的类或对象,但它不能实现Taget接口。
 适配器(Adapter):继承或管理被适配者,且可以实现目标接口。
1.2 应用场景
- 背景 
- 已经有一个目标接口供客户端调用
 - 根据需求新增一个类(该类不能实现目标接口)
 - 修改目标接口开销会很大
 
 - 解决方法 
- 我们新增一个类——适配器
 - 适配器继承新增类,且可以实现目标接口
 
 - 结果 
- 客户端用适配器处理新增类的实例,得到的实例可以实现目标接口。
 
 
1.2 类图
2. 代码示例
2.1 设计
- 背景 
- client通过Bird接口可以获取鸟类实例的信息
 - 有一个Cat类,不能实现Bird接口
 - 但是需要client调用Bird接口来获取Cat实例的信息
 
 - 解决 
- 创建一个适配器CatAdapter 
- 它继承Cat类
 - 且实现Bird接口
 
 
 - 创建一个适配器CatAdapter 
 
2.2 代码
package mainimport "fmt"
//之前有一个Bird接口,他可以Get鸟类的信息
type Bird interface {Get()
}//比如这个鹦鹉类,实现了Bird接口
type Parrot struct {Name    stringFeather string
}func (parrot *Parrot) Get() {fmt.Printf("鹦鹉%q的颜色是:%q\n", parrot.Name, parrot.Feather)
}//业务需求,多了一个猫的类
type Cat struct {Name stringFur  string
}
//它只有Show方法,不能实现Bird接口
func (cat *Cat) Show() {fmt.Printf("猫咪%q的颜色是:%q\n", cat.Name, cat.Fur)
}//我们创建一个猫的解释器,他继承了猫类,同时又可以实现Bird接口
type CatAdapter struct {Cat *Cat
}func (catAdapter *CatAdapter) Get() {catAdapter.Cat.Show()
}//有一个客户端
type Client struct {
}
//它可以直接获取bird信息
func (client Client) GetBird(bird Bird) {bird.Get()
}func main() {//实例化一个叫polly的鹦鹉polly := &Parrot{Name:    "polly",Feather: "green",}//示例话一个叫tom的猫tom := &Cat{Name: "tom",Fur:  "black",}client := Client{}//客户端可以直接使用pollyclient.GetBird(polly)//客户端可以通过解释器使用tomtomAdapter := &CatAdapter{Cat: tom}client.GetBird(tomAdapter)
}
 
2.3 示例类图

