Head First設計模式——中介者模式和備忘錄模式


中介者

中介者模式:使用中介者來集中相關對象之間復雜的溝通方式和控制方式。

Bob有一個自動屋,當他的鬧鍾響了之后,鬧鍾會告訴咖啡壺開始煮咖啡。后來客戶不斷的提出許多新需求:周末不要提供咖啡、下班后需要掃地機器人掃地等。這個時候咖啡壺需要接受鬧鍾並檢查日期,而日歷需要接受鬧鍾的詢問並告訴鬧鍾是否周末,掃地機器人需要接受鬧鍾並檢查是否下班時間等等一系列操作。

 

 

 想要持續地追蹤每個對象的每個規則,以及眾多對象之間彼此錯綜復雜的關系對於設計來說不滿足單一職責,同時可能會相互引用造成系統復雜。這個時候就可以使用中介者模式,在系統中引入一個中介者。

  • 每個對象都會在自己的狀態改變時,告訴中介者。
  • 每個對象都會對中介者發出的請求作出響應。

 

 

設計類圖:

1) Mediator 抽象中介者
  用於定義統一的接口, 用於各設備對象之間的交互
2) Concrete Mediator 具體中介者
  具體中介者持有各設備對象的引用, 負責協調各設備對象的行為以完成協作, 因此具體中介者必須依賴具體設備對象(不符合依賴倒置原則)
3) Equipment 設備抽象類
  每個設備都知道中介者對象(持有接口引用),  與其他設備通信的時候,都通過中介者協作完成
  每個設備實現接口用於中介者通知

 優點:

1、通過將對象彼此解耦,可以增加對象的復用性。

2、通過將控制邏輯集中,可以簡化系統維護。

3、可以讓對象之間所傳遞的消息變得簡單而且大幅減少。

用途和缺點

1、中介者常常被用來協調相關的GUI組件。

2、中介者的缺點是,如果設計不當,中介者對象本身會變得過於復雜。

備忘錄

備忘錄模式:當你需要讓對象返回之前的狀態時,就使用備忘錄模式(例如,“撤銷”操作)

比如我們經常玩的單機游戲,當用戶進入到下一關時我們在游戲中死亡,一般復活后就是從這關游戲的最開始復活。而對於我們進入到下一關時就是一個備忘錄模式,讓我們停留在上一次過關的關卡上。

備忘錄模式有兩個目標:

  • 儲存系統關鍵對象的重要狀態。
  • 維護關鍵對象的封裝。

不要忘記了單一職責,不要把保持狀態的工作和關鍵對象混為一談。這個專門掌握狀態的對象,就稱為備忘錄

設計類圖:

 優點:

1、將被存儲的狀態放在外面,不要和關鍵對象混在一起,可以幫助維護內聚。

2、保持關鍵對象的數據封裝。

3、提供能容易實現的恢復能力。

用途和缺點:

1、備忘錄用於存儲狀態。

2、使用備忘錄的缺點:存儲和恢復狀態的過程可能相當耗時。

3、在系統設計時可以考慮使用序列化(serialization)機制存儲系統的對象。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM