設計模式 命令模式

2021-09-11 09:58:32 字數 1357 閱讀 8635

從前有個傭人,天天做家務,有一天她累了。坐在地上,她想:我每天都拿著掃帚掃地,拿著抹布擦桌子,幹一百件活要用一百種方式。如果能有乙個萬能的盒子,盒子裡面可能有掃帚,可能有抹布,每當幹家務時我只需要把盒子開啟就能完成相應的活了。

今天要做的是乙個萬能處理機,不管什麼樣的請求,什麼樣的工作,萬能處理機都能完成。

讓我們來構思一下做法。很簡單啊,只需要乙個處理機類就行了,然後裡邊有各式各樣的方法,想實現哪個功能就呼叫哪個方法。

等等,工作是做不完的,如果有新的工作怎麼辦?給萬能處理機增加乙個新的方法嗎?如果我有100億個功能呢?

讓我們用命令模式重構萬能處理機。

萬能處理機每做一件工作,就相當於是執行了一條命令。現在我們輸入的每一條命令都是不同格式的,萬能處理機每次都要用獨一無二的方法處理命令,命令執行人緊緊的耦合在了一起。

使用命令模式,把命令和執行人分離開來。

首先,我們要讓所有的命令有統一的格式,這樣萬能處理機就不用去識別命令的格式了,它只需要用統一的操作方法去執行命令即可。

//統一的命令格式

public inte***ce command

我們通過command介面規範所有的命令格式。

現在萬能處理機不會再對不同格式的命令有不同的動作了,它只接受實現command介面的類,只操作介面。

public class processor 

}

現在我們實現具體的命令吧。

//輸入操作

public class inputcommand implements command

}

//列印操作

public class printcommand implements command

}

每個具體的命令都實現了command介面,這樣他們就相當於是擁有了統一的格式,處理機在處理這些請求時就不用一一分析了,只需操縱command介面方法即可。

測試。

public class maintest }}

萬能處理器成功的執行了任務。以後新任務出現了,就讓他實現command介面,規範命令的格式,這樣就可以放到萬能處理器中實現了。

命令模式把請求進行封裝,統一他們的「格式」。讓我們可以通過引數化型別或者同一方法一視同仁的使用它。

在實際開發中,如果遇到了太多太多的特殊情況,需要我們一一給這些特殊情況編碼時,就考慮一下使用命令模式。通過乙個介面讓這些特殊情況有乙個共同的特徵,以便我們能夠一視同仁的使用它們。

設計模式 命令設計模式

一句話總結 命令設計模式的實質是將命令定義,命令的執行分離開,從而提公升了系統的解藕性 結構 命令的抽象command 命令的具體實現concretecommand 命令處理者抽象ireceiver 命令處理者的具體實現concretereceiver 命令的呼叫者invoker 客戶端client...

設計模式 命令模式

1 命令模式的角色組成 1 命令角色 command 生命執行操作的介面。介面或抽象類來實現。2 具體命令角色 concrete command 將乙個接收者物件繫結於乙個動作 呼叫接收者相應的操作,以實現命令角色宣告的執行操作的介面。3 客戶角色 client 建立乙個具體命令物件 並可以設定它的...

設計模式 命令模式

1 command.h ifndef command h define command h include include include using namespace std class chef 廚師,具體命令的執行者 class command 命令基類 class makemuttonco...