17 命令模式

2021-09-02 04:38:31 字數 1517 閱讀 5551

命令模式

1、定義

將乙個請求封裝為乙個物件,從而可用不同的請求對客戶進行引數化;對請求排隊或記錄日誌,以及支援可撤銷的操作

2、結構圖

客戶端(client)角色:建立乙個具體命令(concretecommand)物件並確定其接收者。

命令(command)角色:宣告了乙個給所有具體命令類的抽象介面。

具體命令(concretecommand)角色:定義乙個接收者和行為之間的弱耦合;實現execute()方法,負責呼叫接收者的相應操作。execute()方法通常叫做執行方法。

接收者(receiver)角色:負責具體實施和執行乙個請求。任何乙個類都可以成為接收者,實施和執行請求的方法叫做行動方法。

3、**

(1)接收者receiver

public class receiver 

}

(2)命令介面

public inte***ce command
(3)具體命令

public class concretecommand implements command

private receiver receiver;

@override

public void execute()

}

(4)請求者

public class invoker 

private command command;

public void action()

}

(5)客戶端

public class client 

}

4、總結

更鬆散的耦合

命令模式使得發起命令的物件——客戶端,和具體實現命令的物件——接收者物件完全解耦,也就是說發起命令的物件完全不知道具體實現物件是誰,也不知道如何實現。

更動態的控制

命令模式把請求封裝起來,可以動態地對它進行引數化、佇列化和日誌化等操作,從而使得系統更靈活。

很自然的復合命令

命令模式中的命令物件能夠很容易地組合成復合命令,也就是巨集命令,從而使系統操作更簡單,功能更強大。

更好的擴充套件性

由於發起命令的物件和具體的實現完全解耦,因此擴充套件新的命令就很容易,只需要實現新的命令物件,然後在裝配的時候,把具體的實現物件設定到命令物件中,然後就可以使用這個命令物件,已有的實現完全不用變化。

設計模式17 命令模式

命令 command 模式的定義如下 將乙個請求封裝為乙個物件,使發出請求的責任和執行請求的責任分割開。這樣兩者之間通過命令物件進行溝通,這樣方便將命令物件進行儲存 傳遞 呼叫 增加與管理。舉例 首先建立作為命令的介面 order,然後建立作為請求的 stock 類。實體命令類 buystock 和...

語言與模式 17命令模式

將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行引數化 對請求排隊或記錄請求日誌,以及支援可取消的操作 接收者角色類 public class receiver 抽象命令角色類 public inte ce command 具體命令角色類 public class concretecomm...

《設計模式》17 命令模式(行為型)

將請求封裝成為命令物件,使 方法的請求者 與 方法的實現者 解耦。命令物件可以被儲存 排隊 記錄 處理 撤銷等。又稱為動作 action 模式或事務 transaction 模式。呼叫者 請求者 invoker 請求的傳送者,持有乙個或多個命令物件,通過呼叫命令物件執行命令介面處理相關請求,它不直接...