前三篇笔记讲了五种创造型设计模式,接下来讲讲结构型设计模式,最近在准备毕业论文,所以看代码的时间不多
先回顾一下创造型设计模式,这类模式提供了一种创建对象的最佳方式,并且可以保证系统更加灵活、可扩展、易于维护。其中包括工厂方法模式、抽象工厂模式、单例模式、建造者模式和原型模式等。
接下来讲的结构型模式,这类模式关注对象之间如何组合成更大的结构,以适应变化的需求。在实现过程中,通常会使用接口和继承等面向对象的特性,以达到高内聚、低耦合的目的。其中包括适配器模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式和代理模式等。
1. 适配器模式
- 适配器模式理念
适配器模式是一种结构型设计模式,它的主要设计思想是:将一个类的接口转换成客户端期望的另一个接口,从而让原本不兼容的类能够协同工作。
- 适配器模式设计思路
适配器模式的设计思路很简单,核心是引入一个新的适配器类,在该类中完成将不兼容的接口转换成目标类期望的接口的功能。具体来说,适配器模式的实现步骤如下:
- 定义目标接口(也就是客户端期望的接口)。
- 定义需要适配的接口(也就是被适配的接口)。
- 定义一个适配器类,实现目标接口,并在适配器内部调用被适配对象的接口,实现接口转换。
- 适配器模式应用场景
适配器模式的应用场景十分广泛,特别是在不同系统或组件间进行整合、重用、升级、扩展等方面。常见的应用场景包括:
- 在不修改已有代码的情况下,使不兼容的接口能够协同工作。
- 将一个已有类的接口转化为客户端需要的接口。
- 需要复用已有的类,但是与其他类协作需要进行适配。
- 适配器模式Golang代码举例
在Golang中,我们可以使用结构体和接口来实现适配器模式。以下是一个简单的代码示例:
package main
import "fmt"
type Target interface {
Request() string
}
type Adaptee struct{}
func (a *Adaptee) SpecificRequest() string {
return "Specific request."
}
type Adapter struct {
*Adaptee
}
func (a *Adapter) Request() string {
return a.SpecificRequest()
}
func main() {
adaptee := &Adaptee{}
adapter := &Adapter{adaptee}
result := adapter.Request()
fmt.Println(result)
}
在上述代码中,Adaptee是被适配的对象,Target是目标接口,Adapter是适配器类。在Adapter中,我们将Adaptee的接口转换成了Target所期望的接口。具体地,在Adapter中实现了Target接口,并在方法中调用了Adaptee的接口。在main函数中,我们先创建并初始化了Adaptee对象,然后通过Adapter来调用该对象的方法,最终打印输出结果:Specific request.