Skip to content

设计模式之外观模式

深窥自己的心,而后发觉一切的奇迹在你自己。

Author:李东阳

1、什么是外观模式

内容

为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口(或者说是类),这个接口使得这一个子系统更加容易调用。

角色

  • 外观(facade)

  • 子系统类(subsystem classes)

2、外观模式的实现

怎么理解外观模式的定义呢?所谓子系统,实际上是一些更底层的类或者模块。那么外观模式就是写一个类来让这些底层模块更加容易地被使用。

举个例子:

我们常用的电脑,它的子系统就是CPU、硬盘、内存等等。但是我们不能直接操作(调用)CPU、硬盘吧。所以我们就需要操作系统,这个操作系统它就可以看出外观模式中的那个高层接口。有了这个高层接口,我们就能够间接地操作电脑的子系统了。

下面我们用代码来实现一下电脑的开机操作:

# 子系统
class CPU:
    def run(self):
        print('CPU开机')

    def stop(self):
        print('CPU关机')


class Disk:
    def run(self):
        print('硬盘开机')

    def stop(self):
        print('硬盘关机')


class Memory:
    def run(self):
        print('内存开机')

    def stop(self):
        print('内存关机')


# 外观
class Computer:
    def __init__(self):
        self.cpu = CPU()
        self.disk = Disk()
        self.memory = Memory()

    def run(self):  # 电脑的开机方法
        self.cpu.run()
        self.disk.run()
        self.memory.run()

    def stop(self):
        self.cpu.stop()
        self.disk.stop()
        self.memory.stop()


if __name__ == '__main__':
    computer = Computer()
    computer.run()

3、总结

优点

  • 减少系统相互依赖

  • 提高了灵活性

  • 提高了安全性

缺点

  • 其缺点在于不能很好地限制客户使用子系统类,而且在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”。