設(shè)計(jì)模式 - 命令模式

設(shè)計(jì)模式 - 命令模式

ID:40316778

大?。?04.50 KB

頁(yè)數(shù):9頁(yè)

時(shí)間:2019-07-31

設(shè)計(jì)模式 - 命令模式_第1頁(yè)
設(shè)計(jì)模式 - 命令模式_第2頁(yè)
設(shè)計(jì)模式 - 命令模式_第3頁(yè)
設(shè)計(jì)模式 - 命令模式_第4頁(yè)
設(shè)計(jì)模式 - 命令模式_第5頁(yè)
資源描述:

《設(shè)計(jì)模式 - 命令模式》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。

1、設(shè)計(jì)模式讀書筆記-----命令模式在開發(fā)過程中,我可能會(huì)需要向某些對(duì)象發(fā)送一些請(qǐng)求,但是我們不知請(qǐng)求的具體接收者是誰(shuí),也不知道被請(qǐng)求的操作是那個(gè),我們只知道在程序運(yùn)行中指定具體的請(qǐng)求接收者即可。打個(gè)比方,電視遙控器,我們只需要知道按那個(gè)按鈕能夠打開電視、關(guān)閉電視和換臺(tái)即可,并不需要知道是怎么開電視、關(guān)電視和換臺(tái)的。對(duì)于這種情況,我們可以采用命令模式來進(jìn)行設(shè)計(jì)。一、基本定義命令模式將請(qǐng)求封裝成對(duì)象,以便使用不同的請(qǐng)求、隊(duì)列或者日志來參數(shù)化其他對(duì)象。命令模式支持可撤銷的操作。命令模式可以對(duì)發(fā)送者額接受者完全解耦,發(fā)送者也接收者之間并沒有直接的聯(lián)系,發(fā)送者只需要知道如何發(fā)送請(qǐng)

2、求,不需要關(guān)心請(qǐng)求是如何完成了。這就是命令模式,命令模式將方法調(diào)用給封裝起來了。二、模式結(jié)構(gòu)從上圖可以看出命令模式包含如下幾個(gè)角色:Command:抽象命令類ConcreteCommand:具體命令類Invoker:調(diào)用者Receiver:接收者Client:客戶類命令模式的本質(zhì)就在于將命令進(jìn)行封裝,將發(fā)出命令的責(zé)任和執(zhí)行命令的責(zé)任分開,是的發(fā)送者只需要知道如何發(fā)送命令即可,不需要命令是如何實(shí)現(xiàn)的,甚至命令執(zhí)行是否成功都不需要理會(huì)。同時(shí)命令模式使得請(qǐng)求也變成了一個(gè)對(duì)象,它像其他對(duì)象一樣可以被存儲(chǔ)和傳遞。三、模式實(shí)現(xiàn)這里以電視機(jī)為例。電視劇是請(qǐng)求的接受者,遙控器是請(qǐng)求的發(fā)

3、送者,遙控器上有一些按鈕,不同的按鈕對(duì)應(yīng)著不同的操作。在這里遙控器需要執(zhí)行三個(gè)命令:打開電視機(jī)、關(guān)閉電視機(jī)、換臺(tái)。UML圖:代碼的實(shí)現(xiàn)抽象命令類:Command.java1/**2*Command命令接口,為所有的命令聲明一個(gè)接口。所有的命令都應(yīng)該實(shí)現(xiàn)它3*/4publicinterfaceCommand{5publicvoidexecute();6}電視機(jī)類:Television.java1publicclassTelevision{2publicvoidopen(){3System.out.println("打開電視機(jī)......");4}56publicvoidc

4、lose(){7System.out.println("關(guān)閉電視機(jī)......");8}910publicvoidchangeChannel(){1112System.out.println("切換電視頻道......");13}14}遙控器類:Controller.java1publicclassController{2privateCommandopenTVCommand;3privateCommandcloseTVCommand;4privateCommandchangeChannelCommand;56publicController(CommandopenTv

5、Command,CommandcloseTvCommand,CommandchangeChannelCommand){7this.openTVCommand=openTvCommand;8this.closeTVCommand=closeTvCommand;9this.changeChannelCommand=changeChannelCommand;10}1112/**13*打開電視劇14*/15publicvoidopen(){16openTVCommand.execute();17}1819/**20*關(guān)閉電視機(jī)21*/22publicvoidclose(){23

6、closeTVCommand.execute();24}2526/**27*換頻道28*/29publicvoidchange(){3031changeChannelCommand.execute();32}3334}遙控器的三個(gè)按鈕1publicclassOpenTvCommandimplementsCommand{2privateTelevisiontv;34publicOpenTvCommand(){5tv=newTelevision();6}78publicvoidexecute(){9tv.open();10}1112}1publicclassChangeCh

7、annelCommandimplementsCommand{2privateTelevisiontv;34publicChangeChannelCommand(){5tv=newTelevision();6}78publicvoidexecute(){9tv.changeChannel();10}1112}1publicclassCloseTvCommandimplementsCommand{2privateTelevisiontv;34publicCloseTvCommand(){5tv=newTelevision();6}78publ

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

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

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