设计模式之外观模式¶
深窥自己的心,而后发觉一切的奇迹在你自己。
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、总结¶
优点¶
-
减少系统相互依赖
-
提高了灵活性
-
提高了安全性
缺点¶
- 其缺点在于不能很好地限制客户使用子系统类,而且在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”。