外观模式(Facade Design Pattern)

外观模式又叫门面模式,它通过定义一个高层接口,来隐藏子系统的复杂性,为外界提供一个一致的接口。

现在的软件系统上点规模都会比较复杂,尽管我们已经尽力将一个系统分为几个较小的子系统了,仍然会存在各种问题,比如子系统中有许多类型,调用端就需要和这些对象打交道才能完成各自的功能。

生活中的医院就是这样,病人去医院想治好自己的病需要和医院里各个部门打交道,首先需要去挂号,再去门诊、化验,然后收费、取药,过程非常复杂。

解决这种问题的方式就是引入外观模式,可以在医院设立一个接待员,病人只需要和接待员接触,然后由接待员负责和其它部门沟通。在软件系统中同样也会有类似的问题,这时就可以引入外观模式解决这种问题。

代码示例

我们假设一程序员下班回到家想要洗澡,那么它首先需要打开灯、热水器、空调,边洗澡还想边看个电视,一步步完成这些操作步骤是有点多,我们这个是个聪明的程序员,他做了智能家居改装,这样就只需要一键就可以完成所有操作。

package facade

import "fmt"

type Light struct{}

func (l Light) Open() {
    fmt.Println("打开灯")
}

type TV struct{}

func (tv TV) Open() {
    fmt.Println("打开电视机")
}

type AirConditioning struct{}

func (a AirConditioning) Open() {
    fmt.Println("打开空调")
}

type WaterHeater struct{}

func (w WaterHeater) Open() {
    fmt.Println("打开热水器")
}

type Facade struct{}

func (f Facade) Open() {
    Light{}.Open()
    TV{}.Open()
    AirConditioning{}.Open()
    WaterHeater{}.Open()
}

调用:

var fa Facade
fa.Open()

// Output:
// 打开灯
// 打开电视机
// 打开空调
// 打开热水器

results matching ""

    No results matching ""