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