门面设计模式
主要目的是提供统一子系統的高级接口,用单一接口来表示复杂的子系统,实际上它并不是封装子系统,而是对底层子系统功能进行必要组合,再将客户端的请求透過此接口再委托给包含在其下之相应子系统來處理(*即处理门面所分配的工作)。
UML图
客户端只要与门面作交互,这样就可以轻松地与子系统进行通信并完成工作。
示例:
# -*- coding: UTF-8 -*-
# 门面类
class EventManager(object):
def __init__(self):
print("Event Manager: Let me talk to the folks")
def arrage(self): #門面類提供之接口
self.hotelier = Hotelier() # 引入酒店类
self.hotelier.bookHotel() # 检查当天是不是由免费的酒店
self.florist = Florist() # 引入鲜花类
self.florist.setFlowerRequirements() # 用于指定要使用哪种画来装饰婚礼
self.caterer = Caterer() # 引入宴席承办人类
self.caterer.setCuisine() # 指定酒店的饭菜类型
self.musician = Musician() # 引入婚礼音乐类
self.musician.setMusicType() #音乐要求
# 酒店类
class Hotelier(object):
def __init__(self):
print("安排酒店结婚? --")
def __isAvilable(self):
print("免费就结,不免费不结了?")
return True
def bookHotel(self):
if self.__isAvilable():
print("给老子订一间房")
# 鲜花类
class Florist(object):
def __init__(self):
print("鲜花事件")
def setFlowerRequirements(self):
print("九十九朵浪漫的玫瑰吧")
# 宴席承办人类
class Caterer(object):
def __init__(self):
print("宴席承办人事件")
def setCuisine(self):
print("中国菜和印度菜将被提供")
# 婚礼音乐类
class Musician(object):
def __init__(self):
print("婚礼音乐事件")
def setMusicType(self):
print("播放《今天你要嫁给我》")
# 客戶端
class Client(object):
def __init__(self):
print("婚礼安排")
def askEventManager(self):
print("活動進行之相關流程")
em = EventManager()
em.arrage()
def __del__(self): #釋放方法
print("活动完成,所有流程皆安排妥当!")
if __name__==’__main__’:
client = Client()
client.askEventManager()
輸出:
婚礼安排
活動進行之相關流程
Event Manager: Let me talk to the folks
安排酒店结婚? --
免费就结,不免费不结了?
给老子订一间房
鲜花事件
九十九朵浪漫的玫瑰吧
宴席承办人事件
中国菜和印度菜将被提供
婚礼音乐事件
播放《今天你要嫁给我》
活动完成,所有流程皆安排妥当!
最少知识原则
可减少对象之间的交互:如果类之间存在大量依赖关系,那么系统就会变得难以维护,因对系统中的任务一部分进行修改,都可能导致系统的其他部分无法被改变。