国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

3fuyu / 1776人閱讀

摘要:目錄命令模式為什么使用命令模式命令模式應(yīng)用實(shí)例命令模式命令模式在軟件系統(tǒng)中,行為請(qǐng)求者與行為實(shí)現(xiàn)者通常呈現(xiàn)一種緊耦合。下篇更代理模式,側(cè)重下其和委托形式的區(qū)別和實(shí)際應(yīng)用。

目錄

命令模式

為什么使用命令模式

命令模式應(yīng)用實(shí)例

命令模式

命令模式:在軟件系統(tǒng)中,“行為請(qǐng)求者”與“行為實(shí)現(xiàn)者”通常呈現(xiàn)一種“緊耦合”。但在某些場(chǎng)合,比如要對(duì)行為進(jìn)行“記錄、撤銷/重做、事務(wù)”等處理,這種無(wú)法抵御變化的緊耦合是不合適的。在這種情況下,如何將“行為請(qǐng)求者”與“行為實(shí)現(xiàn)者”解耦?將一組行為抽象為對(duì)象,實(shí)現(xiàn)二者之間的松耦合。這就是命令模式(Command Pattern)

從上面對(duì)于命令模式的定義也反映出了為什么要使用命令模式,通過(guò)將一系列的操作封裝成一個(gè)命令對(duì)象,方便執(zhí)行,同時(shí)也能夠很好的讓我們進(jìn)行一些操作回滾,用來(lái)記錄是否執(zhí)行過(guò)該操作等問(wèn)題。

為什么使用命令模式

當(dāng)我們有一系列任務(wù)要進(jìn)行處理,也就是很多方法,而且這些任務(wù)之間沒(méi)有明顯的先后順序,而我們只有一個(gè)線程用來(lái)執(zhí)行任務(wù),比如某個(gè)物品的裝配任務(wù),不同的人采用了不同的裝配順序,假設(shè)不同裝配順序都可產(chǎn)生該產(chǎn)品,但是只有一個(gè)裝配機(jī)器進(jìn)行裝配任務(wù),因此我們不可能將每個(gè)裝配步驟寫在裝配機(jī)器程序中,因?yàn)槊總€(gè)人的裝配步驟是不同的,所以每個(gè)用來(lái)執(zhí)行裝配任務(wù)的機(jī)器必須能夠進(jìn)行動(dòng)態(tài)的調(diào)整,所以這個(gè)時(shí)候命令模式的作用發(fā)揮出來(lái)了,我們可以這樣架構(gòu)該系統(tǒng)。代碼如下:

/定義一個(gè)命令接口
public interface Command{
    public void execute();
    public void undo();
}

//其中的一個(gè)命令繼承自這個(gè)接口
public class addPatCommand implements Command{
    public void execute(){
        doSomething...
    }
    public void undo(){
        undo...
    }
}

//執(zhí)行者,用來(lái)執(zhí)行命令
public class Executer{
    //命令隊(duì)列
    ArrayListcommandList = new ArrayList();
    //記錄當(dāng)前已經(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();
            }
        }
    }
}

通過(guò)上面的代碼,我們可能發(fā)現(xiàn)這有些像是之前的策略模式,對(duì)不同的行為多帶帶進(jìn)行封裝,然后通過(guò)add方法將依賴實(shí)例注入,然后通過(guò)一個(gè)list持有依賴集群,然后再通過(guò)對(duì)依賴隊(duì)列的遍歷來(lái)執(zhí)行方法,策略模式可能唯一不同的是在在內(nèi)部通過(guò)委托的方式來(lái)執(zhí)行方法,再就是策略模式中每個(gè)委托對(duì)象所要被調(diào)用的方法不同,而且每個(gè)注入的實(shí)例也將會(huì)被用到不同的方法之中,而命令模式則是將其置于一個(gè)方法之中。

命令模式應(yīng)用實(shí)例

數(shù)據(jù)庫(kù)中的事務(wù),可以通過(guò)這種方式來(lái)實(shí)現(xiàn)回滾,日常安排,線程池,工作隊(duì)列等,通過(guò)著我們可以很好的實(shí)現(xiàn)被操作對(duì)象和操作者之間的解耦,同時(shí)還可以實(shí)現(xiàn)撤銷操作。
Android中的Thread通過(guò)構(gòu)造函數(shù)接納實(shí)現(xiàn)了Runnable接口的類,這個(gè)運(yùn)用的就是命令模式,當(dāng)然我們平常更多會(huì)是通過(guò)匿名內(nèi)部類的形式來(lái)將依賴實(shí)例注入。

下篇更代理模式,側(cè)重下其和委托形式的區(qū)別和實(shí)際應(yīng)用。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/64598.html

相關(guān)文章

  • php設(shè)計(jì)模式

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

    Dionysus_go 評(píng)論0 收藏0
  • php設(shè)計(jì)模式

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

    vspiders 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<