門面模式
- 是一個結構型設計模式
- 給子系統中的接口提供統一接口,使用更加簡單。
- 實現:用單一接口解決複雜問題。
- 不是對子系統的再封裝,而是對子系統進行組合。
UML圖
結構型設計模式概述
- 用於描述如何將對象和類組合成更好的結構
- 是一種能夠簡化設計工作的模式,因爲他能夠找出更簡單的方法來表示實體(對象或者類)之間的關係。
- 類模式通過繼承描述對象,從而提供更有用的程序接口。對象模式通過描述對象之間的聯繫從而組成更大的對象。結構型模式是二者的綜合。
- 例如:
- 適配器:把接口轉化成用戶要的另一個接口。
- 橋接:把對象的接口和實現進行解耦,讓他們獨立工作。
- 裝飾器:動態的給運行時的對象添加任務或者屬性(不改變原對象、原代碼)。
實現
- 門面模式本質是一個接口,他知道某個請求可以交給哪個子系統完成
給一個例子:你要舉行婚禮,請了一個經理來操辦事物。
客戶端:你,聯繫經理花錢來辦這個活動,提出需求
門面:經理,來聯繫各個機構(比如花卉,酒席)
子系統:各個服務部門,比如提供菜品的,提供燈光的
# 酒店類,預定酒店
class Hotelier(object):
def __init__(self):
pass
def __is_available(self):
return True
def book_hotel(self):
if self.__is_available():
print('預定了酒店')
# 花卉類
class Florist(object):
def __init__(self):
print('初始化放花的類')
def set_flowers(self):
print('放了好多花')
# 宴席類
class Caterer(object):
def __init__(self):
pass
def set_cuisine(self):
print('有好多吃的')
# 音樂類
class Musician(object):
def __init__(self):
pass
def set_music(self):
print('放音樂')
# 經理類
class EventManager(object):
def __init__(self):
pass
def arrange(self):
self.hotelier = Hotelier()
self.hotelier.book_hotel() # 訂酒店
self.florist = Florist()
self.florist.set_flowers() # 放花
self.caterer = Caterer()
self.caterer.set_cuisine() # 定菜
self.musician = Musician()
self.musician.set_music() # 放音樂
class You(object):
def __init__(self):
print('我的任務開始')
def let_manager_work(self):
EventManager().arrange()
def __del__(self):
print('我的任務結束')
you = You()
you.let_manager_work()
'''結果:
我的任務開始
預定了酒店
初始化放花的類
放了好多花
有好多吃的
放音樂
我的任務結束'''
這就是門面模式,優點很明顯。