14.Javascript設計模式之命令模式----Command
命令Command模式是GOF23種模式中的一種,是一種行為模式。
認識命令模式
在物件導向編程中,大量使用if…else…,或者switch…case…這樣的條件選擇語句是“最差實踐”。通常這類代碼,意味著有重構的餘地。
命令模式就是幹掉條件選擇語句的利器。
通常命令模式的介面中只有一個方法。
實作類別的方法有不同的功能,覆蓋介面中的方法。
開始命令模式 提供一個介面
var ICommand = new Interface("ICommand",["execute"]);提供一個介面的實作類別
每一個實作類別的方法就是if…else…的一個代碼塊中的代碼。
//下面這個定義了一個開機命令var PowerOnCommand = function(){};implements(PowerOnCommand,ICommand);PowerOnCommand.prototype.execute = function(){ alert("已開機");};
當然了,你還可以定義很多其他的命令來完成你其他的操作,比如關機,
//下面這個定義了一個關機命令var PowerOffCommand = function(){};implements(PowerOffCommand,ICommand);PowerOffCommand.prototype.execute = function(){ alert("已關機");};executeCommand方法定義
//這裡定義一個執行用命令的方法,方法接受一個參數,即為ICommand介面的實作類別的執行個體var executeCommand = function(command){ command.execute();};運用命令模式
//開機executeCommand(new PowerOnCommand());//關機executeCommand(new PowerOffCommand());
yes,就這麼簡單的實現了開機和關機的命令模式。
其實你仔細的一想,Windows的各種操作都是基於命令模式的,嘿嘿
當然,命令模式還可以使用其他方式來使用。不一定非用參數回調模式。
命令模式的核心思想是,帶有某個方法的具體類的執行個體,作為介面傳給使用方。對象的具體類型資訊消失。
在使用方代碼中拿到這個介面後調用這個介面的方法。
具體的執行效果,取決的命令發起人提供的對象是哪一個實作類別的。這給了命令發起人完全的控制能力,而使用方代碼不關心具體的命令類和方法。同時也使條件判斷語句成為多餘。
簡單嗎?命令模式其實就是這麼簡單。
估計我說的不夠清楚-_-!!!