19 命令模式 為請求者和實現者解耦

2021-08-15 16:37:34 字數 1069 閱讀 5285

命令模式(command):將乙個請求封裝成乙個物件,從而使你可用不同的請求對對客戶進行引數化;對請求排隊或記錄請求日誌,以及支援可撤銷的操作。

package com.thpin.repository.designpattern;

public class commanddemo }/*

* 命令接受者

*/class receiver

public void actionb() }/*

* 命令介面

*/abstract class command

public abstract void execute();

}/** 命令a

*/class concretecommanda extends command

public void execute() }/*

* 命令b

*/class concretecommandb extends command

public void execute() }/*

* 命令呼叫者

*/class invoker

public command getcommand()

public void setcommand(command command)

}

結果:

執行請求a

執行請求b

命令模式可以較容易地設計乙個命令佇列或日誌,允許接收請求方決定是否要否決請求,也可以容易地實現請求方對請求撤銷或重新請求,很容易加入新的命令因為新的具體命令類不影響其他類。命令模式把請求操作乙個操作的物件和知道如何執行這一操作的物件分隔開。

有時候撤銷/恢復操作並不需要,這時我們是否需要完整的實現命令模式呢?敏捷開發原則告訴我們,不要為**新增猜測的、實際不需要的功能。如果不清楚乙個系統是否需要命令模式,一般就不要急著去實現它,事實上,在需要重構的時候通過重構實現命令模式並不難,只有真正需要如撤銷/恢復操作等功能時,把原來的**重構成命令模式才有意義。

請求傳送者與接收者解耦 命令模式(四)

在命令模式中,我們可以通過呼叫乙個命令物件的execute 方法來實現對請求的處理,如果需要撤銷 undo 請求,可通過在命令類中增加乙個逆向操作來實現。除了通過乙個逆向操作 來實現撤銷 undo 外,還可以通過儲存物件的歷史狀態 來實現撤銷,後者可使用備忘錄模式 memento pattern 來...

請求傳送者與接收者解耦 命令模式(四)

在命令模式中,我們可以通過呼叫乙個命令物件的execute 方法來實現對請求的處理,如果需要撤銷 undo 請求,可通過在命令類中增加乙個逆向操作來實現。擴充套件 除了通過乙個逆向操作來實現撤銷 undo 外,還可以通過儲存物件的歷史狀態來實現撤銷,後者可使用備忘錄模式 memento patter...

請求傳送者與接收者解耦 命令模式(四)

在命令模式中,我們可以通過呼叫乙個命令物件的execute 方法來實現對請求的處理,如果需要撤銷 undo 請求,可通過在命令類中增加乙個逆向操作來實現。擴充套件 除了通過乙個逆向操作來實現撤銷 undo 外,還可以通過儲存物件的歷史狀態來實現撤銷,後者可使用備忘錄模式 memento patter...