日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Command(命令)--对象行为型模式

發(fā)布時(shí)間:2023/12/4 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Command(命令)--对象行为型模式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Command(命令)–對(duì)象行為型模式

一、意圖
將一個(gè)請(qǐng)求封裝為一個(gè)對(duì)象,從而使你可用不同的請(qǐng)求對(duì)客戶進(jìn)行參數(shù)化;對(duì)請(qǐng)求排隊(duì)或記錄請(qǐng)求日志,以及支持可撤銷的操作。

二、動(dòng)機(jī)
1.在軟件構(gòu)建過程中,“行為請(qǐng)求者”與“行為實(shí)現(xiàn)者”通常呈現(xiàn)一種“緊耦合”。但在某些場(chǎng)合——比如需要對(duì)行為進(jìn)行“記錄、撤銷、重做(undo、redo)、事物”等處理,這種無法抵御變化的緊耦合是不合適的。
2.在這種情況下,如何將“行為請(qǐng)求者”與“行為實(shí)現(xiàn)者”解耦?將一組行為抽象為對(duì)象,可以實(shí)現(xiàn)二者之間的松耦合。

三、適用性
1.抽象出待執(zhí)行的動(dòng)作以參數(shù)化某對(duì)象。你可用過程語言中的回調(diào)(callback)函數(shù)表達(dá)這種參數(shù)化機(jī)制。Command模式是回調(diào)機(jī)制的一個(gè)面向?qū)ο蟮奶娲贰?br /> 2.在不同的時(shí)刻指定、排列和執(zhí)行請(qǐng)求。一個(gè)Command對(duì)象可以有一個(gè)與初試請(qǐng)求無關(guān)的生存期。如果一個(gè)請(qǐng)求的接受者可用一種與地址空間無關(guān)的方式表達(dá),那么就可將負(fù)責(zé)該請(qǐng)求的命令對(duì)象傳遞給另一個(gè)不同的進(jìn)程并在那兒實(shí)現(xiàn)該請(qǐng)求。
3.支持取消操作。Command的Execute操作可子啊實(shí)施操作前將狀態(tài)存儲(chǔ)起來,在取消操作時(shí)這個(gè)狀態(tài)用來消除該操作的影響。Command接口必須添加一個(gè)Unexecute操作,該操作取消上一次Execute調(diào)用的效果。執(zhí)行的命令被存儲(chǔ)子啊一個(gè)歷史列表中。可通過向后和向前遍歷者一列表并分別調(diào)用Unexecute和Execute來實(shí)現(xiàn)重?cái)?shù)不限的“取消”和“重做”。
4.支持修改日志,這樣當(dāng)系統(tǒng)奔潰時(shí),這些修改可用被重做一遍。在Command接口中添加裝載操作和存儲(chǔ)操作,可以用來保持變動(dòng)的一個(gè)一致的修改日志。從奔潰中恢復(fù)的過程包括從磁盤中重新讀入記錄下來的命令并用Execute操作重新執(zhí)行它們。
5.用構(gòu)建在原語操作上的高層操作構(gòu)造一個(gè)系統(tǒng)。這樣一種結(jié)構(gòu)在支持事務(wù)的信息系統(tǒng)中很常見。一個(gè)事務(wù)封裝了對(duì)數(shù)據(jù)的一組變動(dòng)。Command模式提供了對(duì)事務(wù)進(jìn)行建模的方法。Command有一個(gè)公共的接口,使得你可以用同一種方式調(diào)用所有的事務(wù)。同時(shí)使用該模式也易于添加新的事務(wù)以擴(kuò)展系統(tǒng)。

四、結(jié)構(gòu)

五、效果
1.Command模式將調(diào)用操作的對(duì)象與知道如何實(shí)現(xiàn)該操作的對(duì)象解耦。
2.Command是頭等的對(duì)象。它們可像其他的對(duì)象一樣被操作和擴(kuò)展。
3.你可將多個(gè)命令裝配成一個(gè)復(fù)合命令。
4.增加新的Command很容易,因?yàn)檫@無需改變已有的類。

六、實(shí)現(xiàn)
1.一個(gè)命令對(duì)象應(yīng)達(dá)到何種智能程度。
2.支持取消(undo)和重做(redo)。
3.避免取消操作過程中的錯(cuò)誤積累。
4.使用C++模版。

七、要點(diǎn)總結(jié)
1.Command模式的根本目的在于將“行為請(qǐng)求者”與“行為實(shí)現(xiàn)者”解耦,在面向?qū)ο蟮恼Z言中,常見的實(shí)現(xiàn)手段是“將行為抽象為對(duì)象”。
2.實(shí)現(xiàn)Command接口的具體命令對(duì)象ConcreteCommand有時(shí)候根據(jù)需要可能會(huì)保存一些額外的狀態(tài)信息。通過使用Composite模式,可以將多個(gè)“命令”封裝為一個(gè)“復(fù)合命令”。
3.Command模式與C++中的函數(shù)對(duì)象有些類似。但兩者的定義行為接口的規(guī)范有所區(qū)別:Command以面向?qū)ο笾械摹敖涌?實(shí)現(xiàn)”來定義行為接口規(guī)范,更嚴(yán)格,但有性能損失;C++函數(shù)對(duì)象以函數(shù)簽名來定義行為接口規(guī)范,更靈活,性能更高。

八、相關(guān)模式
Composite模式可被用來實(shí)現(xiàn)宏命令。
Memento模式可用來保持某個(gè)狀態(tài),命令用這一狀態(tài)來取消它的效果。
在被放入歷史表列前必須被拷貝的命令起到一種原型的作用。

九、舉例說明
命令模式類似于消息。

本文為李建忠設(shè)計(jì)模式視頻的筆記以及《設(shè)計(jì)模式-可復(fù)用面向?qū)ο蟮能浖幕A(chǔ)》和自己的部分見解

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的Command(命令)--对象行为型模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。