结构型模式
外观模式
定义
- 为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用
import time
class Tv:
def on(self):
print("电视机启动中...")
time.sleep(1)
def off(self):
print("电视机关闭中...")
time.sleep(1)
class VoiceBox:
def on(self):
print("音响启动中...")
time.sleep(1)
def off(self):
print("音响关闭中...")
time.sleep(1)
class Light:
def on(self):
print("灯光启动中...")
time.sleep(1)
def off(self):
print("灯光关闭中...")
time.sleep(1)
class XBox:
def on(self):
print("游戏机启动中...")
time.sleep(1)
def off(self):
print("游戏机关闭中...")
time.sleep(1)
class MicroPhone:
def on(self):
print("麦克风启动中...")
time.sleep(1)
def off(self):
print("麦克风关闭中...")
time.sleep(1)
class Projector:
def on(self):
print("投影仪启动中...")
time.sleep(1)
def off(self):
print("投影仪关闭中...")
time.sleep(1)
class HomePlayerFacade:
def __init__(self):
self.vb = VoiceBox()
self.pr = Projector()
self.light = Light()
self.tv = Tv()
self.xb = XBox()
self.mp = MicroPhone()
def do_ktv(self):
print('----------------->进入KTV模式<-----------------')
self.light.on()
self.tv.on()
self.vb.on()
self.mp.on()
self.pr.off()
self.xb.off()
print('-------------->KTV模式可以正常使用<-------------')
def do_game(self):
print('----------------->进入游戏模式<-----------------')
self.tv.on()
self.mp.on()
self.xb.on()
self.vb.off()
self.light.off()
self.pr.off()
self.tv.off()
print('-------------->游戏模式可以正常使用<-------------')
def do_movie(self):
print('----------------->进入观影模式<-----------------')
self.vb.on()
self.pr.on()
self.mp.off()
self.light.off()
self.xb.off()
self.tv.off()
print('-------------->观影模式可以正常使用<-------------')
if __name__ == '__main__':
hp = HomePlayerFacade()
hp.do_movie()
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/76eec5129df5b2ebc7e6155d86d5a69d.gif#pic_center)
优点:
- 它对业务层屏蔽了子系统组件,减少了业务层所需要处理的对象的数目,并使得子系统使用起来更加容易,通过引入外观模式,客户端代码将变得非常简单,与之关联的对象也很少
- 它实现了子系统与客户端之间的松耦合关系,这使得子系统的变化不会影响到调用它的业务层,只需要调整外观类即可
- 一个子系统的修改对其他子系统没有任何影响