1.概念
將來自客戶端的請求傳入乙個物件,從而使你可用不同的請求對客戶進行引數化。用於「行為請求者」與「行為實現者」解耦,可實現二者之間的松耦合,以便適應變化。分離變化與不變的因素。
在物件導向的程式設計中,乙個物件呼叫另乙個物件,一般情況下的呼叫過程是:建立目標物件例項;設定呼叫引數;呼叫目標物件的方法。
但在有些情況下有必要使用乙個專門的類對這種呼叫過程加以封裝,我們把這種專門的類稱作command類。
command模式可應用於
a)整個呼叫過程比較繁雜,或者存在多處這種呼叫。這時,使用command類對該呼叫加以封裝,便於功能的再利用。
b)呼叫前後需要對呼叫引數進行某些處理。
c)呼叫前後需要進行某些額外處理,比如日誌,快取,記錄歷史操作等。
command模式有如下效果:
a)將呼叫操作的物件和知道如何實現該操作的物件解耦。
b)command是頭等物件。他們可以像其他物件一樣被操作和擴充套件。
c)你可將多個命令裝配成乙個符合命令。
d)增加新的command很容易,因為這無需改變現有的類。
下面給個例子,是模擬對電視機的操作有開機、關機、換台命令。**如下
//命令接收者
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.
4.應用場景在下面的情況下應當考慮使用命令模式:1)使用命令模式作為"callback"在物件導向系統中的替代。"callback"講的便是先將乙個函式登記上,然後在以後呼叫此函式。2)需要在不同的時間指定請求、將請求排隊。乙個命令物件和原先的請求發出者可以有不同的生命期。換言之,原先的請求發出者可能已經不在了,而命令物件本身仍然是活動的。這時命令的接收者可以是在本地,也可以在網路的另外乙個位址。命令物件可以在串形化之後傳送到另外一台機器上去。
3)系統需要支援命令的撤消(undo)。命令物件可以把狀態儲存起來,等到客戶端需要撤銷命令所產生的效果時,可以呼叫undo()方法,把命令所產生的效果撤銷掉。命令物件還可以提供redo()方法,以供客戶端在需要時,再重新實施命令效果。
4)如果乙個系統要將系統中所有的資料更新到日誌裡,以便在系統崩潰時,可以根據日誌裡讀回所有的資料更新命令,重新呼叫execute()方法一條一條執行這些命令,從而恢復系統在崩潰前所做的資料更新。
Java設計模式 命令模式
命令模式定義 命令模式通過被稱為command的類封裝了對目標物件的呼叫行為以及呼叫引數。將乙個請求封裝稱為乙個命令,從而使你不同的請求對客戶進行引數化 隊請求排隊或記錄請求日誌,以及支援可撤銷的操作。優點 解耦了呼叫者與接受者之間的聯絡。呼叫者呼叫乙個操作,接受者接受請求執行相應的動作,因為使用命...
JAVA設計模式 命令模式
命令模式,又稱為行動 action 模式 交易 transaction 模式,是一種行為型設計模式。命令模式的思想是 把乙個請求或者操作封裝到乙個物件中,允許系統使用不同的請求把客戶端引數化,從而實現對請求排隊或者記錄請求日誌 提供命令的撤銷和恢復功等能。命令模式涉及5個角色 結構圖 具體 實現 接...
java設計模式 命令模式
package com.hcmony.command author hcmony since v1.0.0,2018 04 09 17 18 public inte ce commandinteface package com.hcmony.command author hcmony since v...