1.概念
將來自客戶端的請求傳入乙個物件,從而使你可用不同的請求對客戶進行引數化。用於「行為請求者」與「行為實現者」解耦,可實現二者之間的松耦合,以便適應變化。分離變化與不變的因素。
在物件導向的程式設計中,乙個物件呼叫另乙個物件,一般情況下的呼叫過程是:建立目標物件例項;設定呼叫引數;呼叫目標物件的方法。
但在有些情況下有必要使用乙個專門的類對這種呼叫過程加以封裝,我們把這種專門的類稱作command類。
command模式可應用於
a)整個呼叫過程比較繁雜,或者存在多處這種呼叫。這時,使用command類對該呼叫加以封裝,便於功能的再利用。
b)呼叫前後需要對呼叫引數進行某些處理。
c)呼叫前後需要進行某些額外處理,比如日誌,快取,記錄歷史操作等。
command模式有如下效果:
a)將呼叫操作的物件和知道如何實現該操作的物件解耦。
b)command是頭等物件。他們可以像其他物件一樣被操作和擴充套件。
c)你可將多個命令裝配成乙個符合命令。
d)增加新的command很容易,因為這無需改變現有的類。
下面給個例子,是模擬對電視機的操作有開機、關機、換台命令。**如下4.應用場景//命令接收者
public
class tv
public
void turnoff()
public
void changechannel(int channel) }//
執行命令的介面
public
inte***ce command
//開機命令
public
class commandon implements command
public
void execute() }//
關機命令
public
class commandoff implements command
public
void execute() }//
頻道切換命令
public
class commandchange implements command
public
void execute() }//
可以看作是遙控器吧
public
class control
public
void turnon()
public
void turnoff()
public
void changechannel() }//
測試類public
class client
}執行結果為:
the televisino is on.
now tv channel is 2
the television is off.
在下面的情況下應當考慮使用命令模式:
1)使用命令模式作為"callback"在物件導向系統中的替代。"callback"講的便是先將乙個函式登記上,然後在以後呼叫此函式。
2)需要在不同的時間指定請求、將請求排隊。乙個命令物件和原先的請求發出者可以有不同的生命期。換言之,原先的請求發出者可能已經不在了,而命令物件本身仍然是活動的。這時命令的接收者可以是在本地,也可以在網路的另外乙個位址。命令物件可以在串形化之後傳送到另外一台機器上去。
3)系統需要支援命令的撤消(undo)。命令物件可以把狀態儲存起來,等到客戶端需要撤銷命令所產生的效果時,可以呼叫undo()方法,把命令所產生的效果撤銷掉。命令物件還可以提供redo()方法,以供客戶端在需要時,再重新實施命令效果。
4)如果乙個系統要將系統中所有的資料更新到日誌裡,以便在系統崩潰時,可以根據日誌裡讀回所有的資料更新命令,重新呼叫execute()方法一條一條執行這些命令,從而恢復系統在崩潰前所做的資料更新。
git 命令模式使用指南
建立新資料夾,開啟,然後執行 git init 以建立新的 git 倉庫。執行如下命令以建立乙個本地倉庫的轉殖版本 git clone path to repository 如果是遠端伺服器上的倉庫,你的命令會是這個樣子 git clone username host path to reposit...
Window PHP 使用命令列模式
電腦系統 win7 php環境 phpstudy 1 把php目錄放到環境變數path下面 我的電腦 屬性 高階 環境變數 系統變數 path 編輯 檢視路徑下有沒有php目錄,如果沒有加上 比如我的php路徑是d phpstudy php php 5.6.27 nts 所以要在最後面加上d php...
你真的會使用命令模式嗎?
命令模式是一種資料驅動設計模式,它屬於行為型模式,請求以命令的形式包裹在物件中,並傳給呼叫物件,呼叫物件尋找可以處理該命令的合適的物件,並把該命令傳給相應的物件。一 建立命令模式uml類圖 二 建立命令模式的步驟 1 建立命令介面command 2 建立命令接收者lightreceiver 3 建立...