命令模式 詳解

2022-01-23 06:45:02 字數 1808 閱讀 8839

旨在將方法呼叫、請求或操作封裝到單一物件中,從而根據我們不同的請求對客戶進行引數化和傳遞可供執行的方法呼叫。此外,這種模式將呼叫操作的物件與知道如何實現該操作的物件解耦,並在交換出具體類(物件)方面提供更大的整體靈活性;

它為我們提供了一種分離職責的手段,這些職責包括從執行命令的任意地方發布命令以及將該職責轉而委託給不同物件;

行為型模式

從網上找到的例圖

比如操控電視,這就是個典型的命令模式;電視作為接受者,被遙控器這個呼叫者操控,遙控器又有多個命令,它們有統一的介面;都會被遙控器呼叫;

/**

* created by george on 16/7/2.

*///命令介面

var command = function () ;

};//命令接收者receiver

var tv = function () ;

this.turnoff = function () ;

this.changechannel = function (channel) ;

};//開機命令

var commandon = function (tv) ;

};//關機命令

var commandoff = function (tv) ;

};//切換頻道命令

var commandchange = function (tv, channel) ;

};//遙控器作為invoker

var control = function (oncommand, offcommand, changecommand) ;

this.turnoff = function () ;

this.changechannel = function () ;

};//電視

var tv = new tv();

//開電視命令

var commandon = new commandon(tv);

//關電視命令

var commandoff = new commandoff(tv);

//切換命令

var commandchange = new commandchange(tv, 2);

//遙控器

var control = new control(commandon, commandoff, commandchange);

control.turnon();

control.turnoff();

control.changechannel();

命令模式的本質是對命令進行封裝,將發出命令的責任和執行命令的責任分隔開;

每乙個命令都是乙個操作:請求的一方發出請求,要求執行乙個操作;接收的一方收到請求,並執行操作;

命令模式允許請求的一方和接收的一方獨立分開,使得請求的一方不必知道接收請求的一方的介面,更不必知道請求是如何被接收,以及操作是否被執行,何時被執行以及執行內容;

命令模式使請求本身成為乙個物件,這個物件和其他物件一樣可以被儲存和傳遞;

命令模式的關鍵在於引入了抽象命令介面,而且傳送者針對抽象命令介面程式設計,只有實現了抽象命令介面的具體命令才能接收者相關聯;

將呼叫操作的物件和知道如何實現該操作的物件解耦;

command是頭等物件,可以像其它物件一樣被操作和擴充套件;

可將多個命令裝配成乙個符合命令;

呼叫同一方法實現不同的功能;

注意的是

如果存在過多的具體命令,這將會影響命令模式的使用;

php設計模式之命令模式的應用詳解

命令模式 將乙個請求封裝為乙個物件,從而你可用不同的sfndfcm請求對客戶進行引數化 對請求排隊或記錄請求日誌,以及支援可撤銷操作。命令類 1.命令角色 宣告了乙個給所有具體命令類的抽象介面。這是乙個抽象角色。2.具體命令角色 定義乙個接受者和行為之間的弱耦合 實現execute方法,負責呼叫接受...

詳解設計模式 外觀模式

外觀模式 facade 為子系統中的一組介面提供乙個一致的介面,facade 模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。隱藏系統的複雜性,並向客戶端提供了乙個客戶端可以訪問系統的介面。降低訪問複雜系統的內部子系統時的複雜度。類圖 在客戶端和複雜系統之間再加一層,將呼叫順序 依賴關係...

設計模式 Builder模式詳解

builder模式也叫做建造者模式,是設計模式的一種,就是將複雜物件的建立變得簡單明瞭,使物件與他的表示進行分離,使得同樣的建立過程,可以建立不同的物件.我們這裡講變種 builder模式 更加簡單,明了 並非真正意義上的builder模式 這種模式的目的用於簡化 不可變 物件的構造 比如 goog...