設(shè)計模式中的黃金搭檔(一對活寶):命令模式+觀察者模式
現(xiàn)有場景描述:
現(xiàn)在無論是系統(tǒng)自帶的鍵盤還是第三方的鍵盤一般都自帶撤銷和恢復(fù)功能,你知道它們是用的什么模式實現(xiàn)的嗎?
它們用的是命令模式+觀察者模式,你答對了嗎?
簡單科普一下
啥是Command模式?
Command模式:
- 模式類型:行為類模式
- 定義:將一個操作、一個方法調(diào)用、一個命令封裝成一個對象,在合適的時候讓這個對象進(jìn)行執(zhí)行。
- 適用場景(執(zhí)行意愿):像個皇帝身邊的守護(hù)侍衛(wèi)一樣,隨叫隨到。隨時準(zhǔn)備著等待被調(diào)用。例如:軟件提供的菜單按鈕,點擊了,就會執(zhí)行相應(yīng)的操作。
- 類圖:

調(diào)用者中有個聚合關(guān)系的命令類
命令類索引著命令接受者
是不是So Easy??!
啥是Obsevser模式?
- 模式類型:行為類模式
- 定義:表示的是一種一對多的關(guān)系。當(dāng)被觀察者類A的屬性aa發(fā)生了改變,就會主動去通知觀察類B、C、D,這樣觀察類們的狀態(tài)就會及時的被更新了。
- 適用場景(執(zhí)行意愿):控制器觀察model中的屬性,當(dāng)屬性變化了就去更新View的信息。系統(tǒng)時刻觀察者鍵盤的字符輸入,有了輸入時,就把輸入信息通知給View展示。等等。
- 類圖:

被觀察者索引著觀察者對象
是不是So Easy?。?/b>
?Cocoa Touch框架內(nèi)的實際應(yīng)用
NSUndoManager是蘋果提供的撤銷恢復(fù)管理類,它里面主要有三個要素構(gòu)成
- 恢復(fù)棧
- 撤銷棧
- 命令對象:NSInvocation
圖表顯示如下:

進(jìn)入撤銷棧時,NSInvocation執(zhí)行撤銷命令

進(jìn)入恢復(fù)棧時,NSInvocation執(zhí)行恢復(fù)命令
開發(fā)中如何將它們合起來用呢?
1.在Command中添加命令執(zhí)行對象NSInvocation
2.在Command中添加觀察者列表,當(dāng)命令執(zhí)行是通知列表中的觀察者
3.創(chuàng)建一個類似NSUndoManager的類,來管理整體commond列表
文章同步發(fā)布在博客園:https://www.cnblogs.com/zhou--fei/p/9905536.html