c23種設(shè)計模式8命令模式

c23種設(shè)計模式8命令模式

ID:36470063

大?。?04.50 KB

頁數(shù):12頁

時間:2019-05-11

c23種設(shè)計模式8命令模式_第1頁
c23種設(shè)計模式8命令模式_第2頁
c23種設(shè)計模式8命令模式_第3頁
c23種設(shè)計模式8命令模式_第4頁
c23種設(shè)計模式8命令模式_第5頁
資源描述:

《c23種設(shè)計模式8命令模式》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、命令模式(CommandPattern)耦合與變化:???耦合是軟件不能抵御變化災(zāi)難的根本性原因。不僅實體對象與實體對象之間存在耦合關(guān)系,實體對象與行為操作之間也存在耦合關(guān)系。????????????????????????????????????????????????????????????????????????????????????????????動機(Motivate):???在軟件系統(tǒng)中,“行為請求者”與“行為實現(xiàn)者”通常呈現(xiàn)一種“緊耦合”。但在某些場合,比如要對行為進行“記錄、撤銷/重做

2、、事務(wù)”等處理,這種無法抵御變化的緊耦合是不合適的。???在這種情況下,如何將“行為請求者”與“行為實現(xiàn)者”解耦?將一組行為抽象為對象,可以實現(xiàn)二者之間的松耦合。意圖(Intent):???將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數(shù)化;對請求排隊或記錄請求日志,以及支持可撤消的操作。?????????????????????????????????????????????????-------《設(shè)計模式》GOF結(jié)構(gòu)圖(Struct):???????????適用性:1.使用命令模式作為

3、"CallBack"在面向?qū)ο笙到y(tǒng)中的替代。"CallBack"講的便是先將一個函數(shù)登記上,然后在以后調(diào)用此函數(shù)。2.需要在不同的時間指定請求、將請求排隊。一個命令對象和原先的請求發(fā)出者可以有不同的生命期。換言之,原先的請求發(fā)出者可能已經(jīng)不在了,而命令對象本身仍然是活動的。這時命令的接收者可以是在本地,也可以在網(wǎng)絡(luò)的另外一個地址。命令對象可以在串形化之后傳送到另外一臺機器上去。3.系統(tǒng)需要支持命令的撤消(undo)。命令對象可以把狀態(tài)存儲起來,等到客戶端需要撤銷命令所產(chǎn)生的效果時,可以調(diào)用undo()方

4、法,把命令所產(chǎn)生的效果撤銷掉。命令對象還可以提供redo()方法,以供客戶端在需要時,再重新實施命令效果。4.如果一個系統(tǒng)要將系統(tǒng)中所有的數(shù)據(jù)更新到日志里,以便在系統(tǒng)崩潰時,可以根據(jù)日志里讀回所有的數(shù)據(jù)更新命令,重新調(diào)用Execute()方法一條一條執(zhí)行這些命令,從而恢復(fù)系統(tǒng)在崩潰前所做的數(shù)據(jù)更新。生活中的例子:????Command模式將一個請求封裝為一個對象,從而使你可以使用不同的請求對客戶進行參數(shù)化。用餐時的賬單是Command模式的一個例子。服務(wù)員接受顧客的點單,把它記在賬單上封裝。這個點單被排

5、隊等待烹飪。注意這里的"賬單"是不依賴于菜單的,它可以被不同的顧客使用,因此它可以添入不同的點單項目。??????????????????代碼實現(xiàn):???在眾多的設(shè)計模式中,Command模式是很簡單也很優(yōu)雅的一種設(shè)計模式。Command模式它封裝的是命令,把命令發(fā)出者的責(zé)任和命令執(zhí)行者的責(zé)任分開。我們知道,一個類是一組操作和相應(yīng)的一些變量的集合,現(xiàn)在有這樣一個類Document,如下:????????????????????????????????????1?///?

?2??3?//

6、/?文檔類?4??5?///?

?6??7?public?class?Document?8??9?{10?????/**////?11?12?????///?顯示操作13?14?????///?15?16?????public?void?Display()17?18?????{19?????????Console.WriteLine("Display");20?????}?21?22?????/**////?23?24?????/

7、//?撤銷操作25?26?????///?

27?28?????public?void?Undo()29?30?????{31?????????Console.WriteLine("Undo");32?????}33?34?????/**////?35?36?????///?恢復(fù)操作37?38?????///?39?40?????public?void?Redo()41?42?????{43?????????Console.WriteLine("R

8、edo");44?????}45?}通??蛻舳藢崿F(xiàn)代碼如下:???1?class?Program?2??3?{?4?????static?void?Main(string[]?args)?5??6?????{?7?????????Document?doc?=?new?Document();?8??9?????????doc.Display();10?11?????????doc.Undo();12?13?????????doc.Redo()

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。