摘要:目錄命令模式為什么使用命令模式命令模式應(yīng)用實例命令模式命令模式在軟件系統(tǒng)中,行為請求者與行為實現(xiàn)者通常呈現(xiàn)一種緊耦合。下篇更代理模式,側(cè)重下其和委托形式的區(qū)別和實際應(yīng)用。
目錄
命令模式
為什么使用命令模式
命令模式應(yīng)用實例
命令模式命令模式:在軟件系統(tǒng)中,“行為請求者”與“行為實現(xiàn)者”通常呈現(xiàn)一種“緊耦合”。但在某些場合,比如要對行為進行“記錄、撤銷/重做、事務(wù)”等處理,這種無法抵御變化的緊耦合是不合適的。在這種情況下,如何將“行為請求者”與“行為實現(xiàn)者”解耦?將一組行為抽象為對象,實現(xiàn)二者之間的松耦合。這就是命令模式(Command Pattern)
從上面對于命令模式的定義也反映出了為什么要使用命令模式,通過將一系列的操作封裝成一個命令對象,方便執(zhí)行,同時也能夠很好的讓我們進行一些操作回滾,用來記錄是否執(zhí)行過該操作等問題。
為什么使用命令模式當我們有一系列任務(wù)要進行處理,也就是很多方法,而且這些任務(wù)之間沒有明顯的先后順序,而我們只有一個線程用來執(zhí)行任務(wù),比如某個物品的裝配任務(wù),不同的人采用了不同的裝配順序,假設(shè)不同裝配順序都可產(chǎn)生該產(chǎn)品,但是只有一個裝配機器進行裝配任務(wù),因此我們不可能將每個裝配步驟寫在裝配機器程序中,因為每個人的裝配步驟是不同的,所以每個用來執(zhí)行裝配任務(wù)的機器必須能夠進行動態(tài)的調(diào)整,所以這個時候命令模式的作用發(fā)揮出來了,我們可以這樣架構(gòu)該系統(tǒng)。代碼如下:
/定義一個命令接口 public interface Command{ public void execute(); public void undo(); } //其中的一個命令繼承自這個接口 public class addPatCommand implements Command{ public void execute(){ doSomething... } public void undo(){ undo... } } //執(zhí)行者,用來執(zhí)行命令 public class Executer{ //命令隊列 ArrayListcommandList = new ArrayList (); //記錄當前已經(jīng)執(zhí)行的命令 int executed = 0; //執(zhí)行命令 public void execute(){ if(commandList.size()==0) System.out.println("Please add a command"); else{ for(int i=executed; i =0; i--){ commandList.get(i).undo(); } } } }
通過上面的代碼,我們可能發(fā)現(xiàn)這有些像是之前的策略模式,對不同的行為多帶帶進行封裝,然后通過add方法將依賴實例注入,然后通過一個list持有依賴集群,然后再通過對依賴隊列的遍歷來執(zhí)行方法,策略模式可能唯一不同的是在在內(nèi)部通過委托的方式來執(zhí)行方法,再就是策略模式中每個委托對象所要被調(diào)用的方法不同,而且每個注入的實例也將會被用到不同的方法之中,而命令模式則是將其置于一個方法之中。
命令模式應(yīng)用實例數(shù)據(jù)庫中的事務(wù),可以通過這種方式來實現(xiàn)回滾,日常安排,線程池,工作隊列等,通過著我們可以很好的實現(xiàn)被操作對象和操作者之間的解耦,同時還可以實現(xiàn)撤銷操作。
Android中的Thread通過構(gòu)造函數(shù)接納實現(xiàn)了Runnable接口的類,這個運用的就是命令模式,當然我們平常更多會是通過匿名內(nèi)部類的形式來將依賴實例注入。
下篇更代理模式,側(cè)重下其和委托形式的區(qū)別和實際應(yīng)用。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/64598.html
摘要:我們今天也來做一個萬能遙控器設(shè)計模式適配器模式將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。今天要介紹的仍然是創(chuàng)建型設(shè)計模式的一種建造者模式。設(shè)計模式的理論知識固然重要,但 計算機程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計模式 上節(jié)我們提到,類 Collections 中大概有兩類功能,第一類是對容器接口對象進行操作,第二類是返回一個容器接口對象,上節(jié)我們介紹了...
摘要:我們今天也來做一個萬能遙控器設(shè)計模式適配器模式將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。今天要介紹的仍然是創(chuàng)建型設(shè)計模式的一種建造者模式。設(shè)計模式的理論知識固然重要,但 計算機程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計模式 上節(jié)我們提到,類 Collections 中大概有兩類功能,第一類是對容器接口對象進行操作,第二類是返回一個容器接口對象,上節(jié)我們介紹了...
閱讀 1011·2023-04-25 19:35
閱讀 2675·2021-11-22 09:34
閱讀 3708·2021-10-09 09:44
閱讀 1733·2021-09-22 15:25
閱讀 2947·2019-08-29 14:00
閱讀 3382·2019-08-29 11:01
閱讀 2609·2019-08-26 13:26
閱讀 1745·2019-08-23 18:08