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

滴水微瀾發表於2018-11-04


現有場景描述:
現在無論是系統自帶的鍵盤還是第三方的鍵盤一般都自帶撤銷和恢復功能,你知道它們是用的什麼模式實現的嗎?
它們用的是==命令模式+觀察者模式==,你答對了嗎?
簡單科普一下
啥是==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

 

相關文章