外观模式包含以下主要角色:
1. 外观(Facade): 提供了一个简化的接口,将客户端与子系统的交互进行封装。
2. 子系统(Subsystem): 实现了系统的功能,客户端可以通过外观模式提供的接口来访问子系统的功能。
3. 客户端(Client): 使用外观模式提供的接口来访问子系统。
下面是一个简单的外观模式的例子,假设我们有一个音响系统,其中包含了多个子系统(CD播放器、投影仪、音响等):
# 子系统:CD播放器
class CDPlayer:
def on(self):
print("CD Player is ON")
def play(self):
print("CD is playing")
def off(self):
print("CD Player is OFF")
# 子系统:投影仪
class Projector:
def on(self):
print("Projector is ON")
def play(self):
print("Projector is projecting")
def off(self):
print("Projector is OFF")
# 子系统:音响
class AudioSystem:
def on(self):
print("Audio System is ON")
def play(self):
print("Audio is playing")
def off(self):
print("Audio System is OFF")
# 外观
class HomeTheaterFacade:
def __init__(self, cd_player, projector, audio_system):
self._cd_player = cd_player
self._projector = projector
self._audio_system = audio_system
def watch_movie(self):
print("Get ready to watch a movie!")
self._cd_player.on()
self._projector.on()
self._audio_system.on()
self._cd_player.play()
self._projector.play()
self._audio_system.play()
def end_movie(self):
print("Movie is over, shutting down the home theater")
self._cd_player.off()
self._projector.off()
self._audio_system.off()
# 客户端代码
if __name__ == "__main__":
# 创建子系统对象
cd_player = CDPlayer()
projector = Projector()
audio_system = AudioSystem()
# 创建外观对象
home_theater = HomeTheaterFacade(cd_player, projector, audio_system)
# 使用外观模式提供的接口来操作子系统
home_theater.watch_movie()
home_theater.end_movie()
在上述示例中,CDPlayer、Projector、AudioSystem 分别代表音响系统的三个子系统。HomeTheaterFacade 是外观,提供了 watch_movie 和 end_movie 两个接口,客户端可以通过这两个接口来操作整个音响系统,而不需要了解每个子系统的详细操作。
外观模式的优点在于它提供了一个简化的接口,隐藏了子系统的复杂性,使得客户端更加容易使用。这样可以降低客户端与子系统之间的耦合度,提高系统的可维护性和扩展性。
转载请注明出处:http://www.pingtaimeng.com/article/detail/11848/设计模式