設計模式學習一 命令模式

2021-08-10 01:24:33 字數 2362 閱讀 4326

一、什麼叫做命令模式

定義:將請求封裝成物件,這可以讓你使用不同的佇列,請求,或者日誌請求來引數化其他物件。命令模式也支援撤銷操作。

二、使用場景

當需要將發出請求的物件和執行請求的物件解耦的時候使用命令模式。

三、命令模式的構成:

命令模式包括:(1)命令介面或者命令抽象類(command):定義命令類所需要的方法

(2)具體命令類(***command):抽象命令的具體實現,裡面包含了命令的接收者,用於執行真正的命令

(3)命令請求者(invoker):請求命令,讓具體接受者(receiver)執行

(4)命令接受者(receiver):具體命令的執行者

(5)客戶端類(client):用於分配命令以及命令的執行者

四、具體場景:

有乙個廠家生產了乙個控制器,上面有七個開關,用來控制七種不同的電器。如何實現控制器控制開關的行為更加方便,並且有利於以後的擴充套件呢?

分析:控制器可以當作命令請求者,開關的開與關需要被賦予不同的命令功能,這些命令都實現command介面,為每乙個命令賦予乙個命令的執行者。當以後有新的電器加入的時候,只需要再寫乙個具體命令實現命令介面然後在具體命令中放入新的電器即可。

具體**:

/**

* 命令介面

* */

inte***ce command

/** * 命令的執行者

* */

class tv

public void closetv()

}class light

public void closelight()

}

//具體命令,裡面包含對命令執行者的引用

class tvopencommand implements command

@override

public void execute() }

class tvclosecommand implements command

@override

public void execute() }

class lightopencommand implements command

@override

public void execute() }

class lightoffcommand implements command

@override

public void execute()

}/**

* 當沒有命令的時候,設定成空命令類,這樣便於管理

* */

class nocommand implements command }

/** * 命令的執行者

* */

class electriccontroller

undocommand=new nocommand();

} public void setcommand(int pos,command oncommand,command offcommand)

public void removecommand(int pos)

public void oncommandbutton(int pos)

public void offcommandbutton(int pos)

public void undobutton()

}/**

* 客戶端類,用來分配命令以及命令的執行者

* */

public class controllerclient

}

/**

* 輸出

開啟電視

關閉電視

開燈關燈

*/

ps:關於undobutton方法

執行命令後,可能需要執行命令的撤銷,這時候可以使用undo方法,用來記錄上一次的命令請求,然後撤銷即可。

五、擴充套件

執行之前操作的全部撤銷?

這時候可以用乙個棧儲存全部的操作,每執行乙個操作就放入棧中,撤銷時候,每次從棧中取出乙個元素執行撤銷操作,並移除直到棧為空。

日誌請求:

如果需要將操作記錄到磁碟中,命令模式可以做到這一點,通過在執行者中新增乙個load和store方法,把每一次執行的命令,通過load儲存到本地磁碟,當伺服器出錯後,可以從磁碟中從檢查點開始(也就是store開始記錄的時候),呼叫load執行操作。

佇列請求:

可以設定乙個請求命令工作佇列,乙個命令請求者對應乙個請求佇列,從中按順序取出命令執行。

junit設計模式分析一 命令模式

命令模式 將乙個請求封裝成乙個物件,從而使你可用不同的請求對客戶進行引數化 對請求進行排隊或記錄請求日誌.command模式告訴我們可以為乙個操作 方法 生成乙個物件並給出它的乙個 execute 執行 方法。注意 這裡都是乙個。命令模式的構成 1 客戶角色 建立乙個具體命令物件,並確定其接收者 2...

Java 設計模式(十一)命令模式

命令模式 將乙個請求封裝為物件,從而使我們可用不同的請求對客戶進行引數化 對請求排隊或者記錄請求日誌,以及支援可撤銷的操作。也稱為 動作 action 模式 事務 transaction 模式。結構圖 示例 receiver接收者 真正的命令執行者 public class receiver pub...

設計模式學習 命令模式

命令模式,將乙個請求封裝為乙個物件,從而使你可以用不同的請求對客戶進行引數化,對請求排隊或記錄請求日誌,以及支援可撤銷操作。命令模式的作用 第一,它能較容易地設計乙個命令佇列 第二,在需要的情況下,可以較容易地將命令計入日誌 第三,允許接收請求的一方決定是否要否決請求。第四,可以容易地實現對請求的撤...