外观模式是一种在日常开发中经常用到的设计模式,它与之前提到过的 适配器模式 有一定的相似之处,但理念是不一样的。
外观模式的核心在于将复杂的内部实现包装起来,只向外界提供简单的调用接口。类似现实世界中的电脑,开机按钮可以说就是一个简单的调用接口,帮用户屏蔽了复杂的内部电路。
在程序开发中,外观模式通常在层次结构之间提供清晰简单的互相调用。书上的例子引入了一些不必要的东西,这里我用计算机的例子来说明:
假设我们需要将计算机抽象,并且这个计算机启动仅需两步:调用BIOS和内核,关闭同样只是顺序相反。那么首先我们声明一个 Computer 类,它只提供 start 和 stop 方法供外部调用。
def Computer(object): def __init__(self): self.bios = Bios() self.kernal = Kernal() def start(self): for i in (self.bios, self.kernal): i.start() def stop(self): for i in (self.kernal, self.bios): i.stop()然后我们需要将 Bios 和 Kernal 类声明出来。
class Bios(object): def __init__(self): pass def start(self): print('bios start ok') def stop(self): print('bios stop ok') class Kernal(object): def __init__(self): pass def start(self): print('kernal start ok') def stop(self): print('kernal stop ok')然后对于用户来讲,当他实例化了一个 computer 对象后,如果需要执行启动操作,只需要调用 computer.start() 即可完成所有启动过程,无需自己逐步的调用 bios 和 kernal 进行启动。如此一来就实现了将复杂逻辑进行封装的目的。
这个模式因为十分常用,所以开发者应该都相对比较熟悉,而且其本身的实现也比较简单,所以就以这个简单的例子作为说明即可。