設(shè)計(jì)模式中的黃金搭檔(一對(duì)活寶):命令模式+觀察者模式
現(xiàn)有場(chǎng)景描述:
現(xiàn)在無論是系統(tǒng)自帶的鍵盤還是第三方的鍵盤一般都自帶撤銷和恢復(fù)功能谦炒,你知道它們是用的什么模式實(shí)現(xiàn)的嗎寥殖?
它們用的是命令模式+觀察者模式腥放,你答對(duì)了嗎泣栈?
簡(jiǎn)單科普一下
啥是Command模式粹舵?
Command模式:
- 模式類型:行為類模式
- 定義:將一個(gè)操作册烈、一個(gè)方法調(diào)用戈泼、一個(gè)命令封裝成一個(gè)對(duì)象,在合適的時(shí)候讓這個(gè)對(duì)象進(jìn)行執(zhí)行赏僧。
- 適用場(chǎng)景(執(zhí)行意愿):像個(gè)皇帝身邊的守護(hù)侍衛(wèi)一樣大猛,隨叫隨到。隨時(shí)準(zhǔn)備著等待被調(diào)用淀零。例如:軟件提供的菜單按鈕挽绩,點(diǎn)擊了,就會(huì)執(zhí)行相應(yīng)的操作窑滞。
- 類圖:
調(diào)用者中有個(gè)聚合關(guān)系的命令類
命令類索引著命令接受者
是不是So EasyG砟痢!
啥是Obsevser模式哀卫?
- 模式類型:行為類模式
- 定義:表示的是一種一對(duì)多的關(guān)系巨坊。當(dāng)被觀察者類A的屬性aa發(fā)生了改變,就會(huì)主動(dòng)去通知觀察類B此改、C趾撵、D,這樣觀察類們的狀態(tài)就會(huì)及時(shí)的被更新了共啃。
- 適用場(chǎng)景(執(zhí)行意愿):控制器觀察model中的屬性占调,當(dāng)屬性變化了就去更新View的信息。系統(tǒng)時(shí)刻觀察者鍵盤的字符輸入移剪,有了輸入時(shí)究珊,就把輸入信息通知給View展示。等等纵苛。
- 類圖:
被觀察者索引著觀察者對(duì)象
是不是So Easy=虽獭!
?Cocoa Touch框架內(nèi)的實(shí)際應(yīng)用
NSUndoManager是蘋果提供的撤銷恢復(fù)管理類攻人,它里面主要有三個(gè)要素構(gòu)成
- 恢復(fù)棧
- 撤銷棧
- 命令對(duì)象:NSInvocation
圖表顯示如下:
進(jìn)入撤銷棧時(shí)取试,NSInvocation執(zhí)行撤銷命令
進(jìn)入恢復(fù)棧時(shí),NSInvocation執(zhí)行恢復(fù)命令
開發(fā)中如何將它們合起來用呢怀吻?
1.在Command中添加命令執(zhí)行對(duì)象NSInvocation
2.在Command中添加觀察者列表瞬浓,當(dāng)命令執(zhí)行是通知列表中的觀察者
3.創(chuàng)建一個(gè)類似NSUndoManager的類,來管理整體commond列表
文章同步發(fā)布在博客園:https://www.cnblogs.com/zhou--fei/p/9905536.html