结构型:二. 外观模式(facade)
外观模式是什么
外观模式是一种结构性设计模式,它能为程序库、框架或者其他复杂的子系统提供一个统一的高层界面,使子系统更容易使用。外观模式就是聚合多个接口实现,对外只暴露单个接口。隐藏子系统的复杂性。调用方不关心实现步骤。
为什么要用外观模式
当子系统提供的功能很多,而我们子需要多个子系统中很少的几个功能时。这时我们可以用外观模式,让我们不必关注与子系统众多的方法。或者子系统相互调用复杂时,外观模式我们不必清楚子系统中众多类之间的相互调用关系。
外观模式怎么实现
电脑启动需要依次启动电源、主板、CPU、内存、硬盘。当然我们也可以用外观模式封装一下,把它们都封装到一起。当然这个例子比较简单,子系统之间没有相互调用。
package facade
import "fmt"
// 电源
type Power struct{}
func (Power) start() {
fmt.Println("启动电源。。。")
}
// 主板
type Motherboard struct{}
func (Motherboard) start() {
fmt.Println("启动主板。。。")
}
// CPU
type CPU struct{}
func (CPU) start() {
fmt.Println("启动CPU。。。")
}
// 内存
type Memory struct{}
func (Memory) start() {
fmt.Println("启动内存管理。。。")
}
// 硬盘
type Disk struct{}
func (Disk) start() {
fmt.Println("启动硬盘。。。")
}
// 开机键
type Computer struct{}
func (Computer) Start() {
new(Power).start()
new(Motherboard).start()
new(CPU).start()
new(Memory).start()
new(Disk).start()
}
优点
- 提高易用性:外观模式使子系统更容易使用,客户端更容易使用子系统功能。
- 重点突出,降低复杂度:外观模式更能体现子系统的核心功能,重点突出,一定程度降低系统整体复杂度。
- 减少依赖:客户端调用外观模式提供的统一高层界面,比客户端单独调用众多子系统减少依赖,降低子系统与调用者之间的耦合度。
缺点
- 外观类可能耦合的类较多,使外观类变的臃肿,且不易维护。