外观模式是一种在日常开发中经常用到的设计模式,它与之前提到过的适配器模式有一定的相似之处,但理念是不一样的。
外观模式的核心在于将复杂的内部实现包装起来,只向外界提供简单的调用接口。类似现实世界中的电脑,开机按钮可以说就是一个简单的调用接口,帮用户屏蔽了复杂的内部电路。
在程序开发中,外观模式通常在层次结构之间提供清晰简单的互相调用。书上的例子引入了一些不必要的东西,这里我用计算机的例子来说明:
假设我们需要将计算机抽象,并且这个计算机启动仅需两步:调用BIOS和内核,关闭同样只是顺序相反。那么首先我们声明一个 Computer 类,它只提供 start 和 stop 方法供外部调用。
class 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 进行启动。如此一来就实现了将复杂逻辑进行封装的目的。
这个模式因为十分常用,所以开发者应该都相对比较熟悉,而且其本身的实现也比较简单,所以就以这个简单的例子作为说明即可。