設計模式中的黃金搭檔:命令模式+觀察者模式



現有場景描述:
現在無論是系統自帶的鍵盤還是第三方的鍵盤一般都自帶撤銷和恢復功能,你知道它們是用的什么模式實現的嗎?
它們用的是==命令模式+觀察者模式==,你答對了嗎?
簡單科普一下
啥是==Command模式==
Command模式:
- 模式類型:行為類模式
- 定義:將一個操作、一個方法調用、一個命令封裝成一個對象,在合適的時候讓這個對象進行執行。
- 適用場景(執行意願):像個皇帝身邊的守護侍衛一樣,隨叫隨到。隨時准備着等待被調用。例如:軟件提供的菜單按鈕,點擊了,就會執行相應的操作。
- 類圖:

 

調用者中有個聚合關系的命令類
命令類索引着命令接受者
是不是==So Easy!!==

啥是==Obsevser模式==?
- 模式類型:行為類模式
- 定義:表示的是一種一對多的關系。當被觀察者類A的屬性aa發生了改變,就會主動去通知觀察類B、C、D,這樣觀察類們的狀態就會及時的被更新了。
- 適用場景(執行意願):控制器觀察model中的屬性,當屬性變化了就去更新View的信息。系統時刻觀察者鍵盤的字符輸入,有了輸入時,就把輸入信息通知給View展示。等等。
- 類圖:

 

被觀察者索引着觀察者對象
是不是==So Easy!!==

Cocoa Touch框架內的實際應用
NSUndoManager是蘋果提供的撤銷恢復管理類,它里面主要有三個要素構成
- 恢復棧
- 撤銷棧
- 命令對象:NSInvocation
圖表顯示如下:進入撤銷棧時,NSInvocation執行撤銷命令

 

 


進入恢復棧時,NSInvocation執行恢復命令

開發中如何將它們合起來用呢?
1.在Command中添加命令執行對象NSInvocation
2.在Command中添加觀察者列表,當命令執行是通知列表中的觀察者
3.創建一個類似NSUndoManager的類,來管理整體commond列表

 

文章同步發布在簡書:https://www.jianshu.com/p/ec11c30b100d

 


免責聲明!

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



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