中介者
中介者模式:使用中介者來集中相關(guān)對象之間復(fù)雜的溝通方式和控制方式。
Bob有一個自動屋,當他的鬧鐘響了只有,鬧鐘會告訴咖啡壺開始煮咖啡。后來客戶不斷的提出許多新需求:周末不要提供咖啡、下班后需要掃地機器人掃地等。這個時候咖啡壺需要接受鬧鐘并檢查日期,而日歷需要接受鬧鐘的詢問并告訴鬧鐘是否周末,掃地機器人需要接受鬧鐘并檢查是否下班時間等等一系列操作。
?
?
?想要持續(xù)地追蹤每個對象的每個規(guī)則,以及眾多對象之間彼此錯綜復(fù)雜的關(guān)系對于設(shè)計來說不滿足單一職責(zé),同時可能會相互引用造成系統(tǒng)復(fù)雜。這個時候就可以使用中介者模式,在系統(tǒng)中引入一個中介者。
* 每個對象都會在自己的狀態(tài)改變時,告訴中介者。
* 每個對象都會對中介者發(fā)出的請求作出響應(yīng)。
?
?
設(shè)計類圖:
1)?Mediator?抽象中介者
用于定義統(tǒng)一的接口,?用于各設(shè)備對象之間的交互
2)?Concrete?Mediator?具體中介者
具體中介者持有各設(shè)備對象的引用,?負責(zé)協(xié)調(diào)各設(shè)備對象的行為以完成協(xié)作,?因此具體中介者必須依賴具體設(shè)備對象(不符合依賴倒置原則)
3) Equipment 設(shè)備抽象類
每個設(shè)備都知道中介者對象(持有接口引用),? 與其他設(shè)備通信的時候,都通過中介者協(xié)作完成
每個設(shè)備實現(xiàn)接口用于中介者通知
?優(yōu)點:
1、通過將對象彼此解耦,可以增加對象的復(fù)用性。
2、通過將控制邏輯集中,可以簡化系統(tǒng)維護。
3、可以讓對象之間所傳遞的消息變得簡單而且大幅減少。
用途和缺點
1、中介者常常被用來協(xié)調(diào)相關(guān)的GUI組件。
2、中介者的缺點是,如果設(shè)計不當,中介者對象本身會變得過于復(fù)雜。
備忘錄
備忘錄模式:當你需要讓對象返回之前的狀態(tài)時,就使用備忘錄模式(例如,“撤銷”操作)
比如我們經(jīng)常玩的單機游戲,當用戶進入到下一關(guān)時我們在游戲中死亡,一般復(fù)活后就是從這關(guān)游戲的最開始復(fù)活。而對于我們進入到下一關(guān)時就是一個備忘錄模式,讓我們停留在上一次過關(guān)的關(guān)卡上。
備忘錄模式有兩個目標:
* 儲存系統(tǒng)關(guān)鍵對象的重要狀態(tài)。
* 維護關(guān)鍵對象的封裝。
不要忘記了單一職責(zé),不要把保持狀態(tài)的工作和關(guān)鍵對象混為一談。這個專門掌握狀態(tài)的對象,就稱為備忘錄。
設(shè)計類圖:
?優(yōu)點:
1、將被存儲的狀態(tài)放在外面,不要和關(guān)鍵對象混在一起,可以幫助維護內(nèi)聚。
2、保持關(guān)鍵對象的數(shù)據(jù)封裝。
3、提供能容易實現(xiàn)的恢復(fù)能力。
用途和缺點:
1、備忘錄用于存儲狀態(tài)。
2、使用備忘錄的缺點:存儲和恢復(fù)狀態(tài)的過程可能相當耗時。
3、在系統(tǒng)設(shè)計時可以考慮使用序列化(serialization)機制存儲系統(tǒng)的對象。
熱門工具 換一換