命令模式(已經使用感覺不賴)

2021-06-22 05:32:21 字數 2338 閱讀 7791

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()方法一條一條執行這些命令,從而恢復系統在崩潰前所做的資料更新。

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 建立...