成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

設(shè)計模式(6)命令模式(講解+應(yīng)用)

3fuyu / 1780人閱讀

摘要:目錄命令模式為什么使用命令模式命令模式應(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

相關(guān)文章

  • php設(shè)計模式

    摘要:我們今天也來做一個萬能遙控器設(shè)計模式適配器模式將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。今天要介紹的仍然是創(chuàng)建型設(shè)計模式的一種建造者模式。設(shè)計模式的理論知識固然重要,但 計算機程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計模式 上節(jié)我們提到,類 Collections 中大概有兩類功能,第一類是對容器接口對象進行操作,第二類是返回一個容器接口對象,上節(jié)我們介紹了...

    Dionysus_go 評論0 收藏0
  • php設(shè)計模式

    摘要:我們今天也來做一個萬能遙控器設(shè)計模式適配器模式將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。今天要介紹的仍然是創(chuàng)建型設(shè)計模式的一種建造者模式。設(shè)計模式的理論知識固然重要,但 計算機程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計模式 上節(jié)我們提到,類 Collections 中大概有兩類功能,第一類是對容器接口對象進行操作,第二類是返回一個容器接口對象,上節(jié)我們介紹了...

    vspiders 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<