结构型:二. 外观模式(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()
}

优点

  1. 提高易用性:外观模式使子系统更容易使用,客户端更容易使用子系统功能。
  2. 重点突出,降低复杂度:外观模式更能体现子系统的核心功能,重点突出,一定程度降低系统整体复杂度。
  3. 减少依赖:客户端调用外观模式提供的统一高层界面,比客户端单独调用众多子系统减少依赖,降低子系统与调用者之间的耦合度。

缺点

  1. 外观类可能耦合的类较多,使外观类变的臃肿,且不易维护。
posted @ 2022-03-22 21:25  EthanWell  阅读(206)  评论(0编辑  收藏  举报