設計模式之命令模式(Command)【Java實現】

命令模式(Command Pattern):

定義

命令模式(Command Pattern):將一個請求封裝爲一個對象,從而你可以用不同的請求對客戶進行參數化;對請求排隊或記錄請求日誌,以及支持可撤銷的操作。

 

使用場景

在某些場合,比如要對行爲進行"記錄、撤銷/重做、事務"等處理,這種無法抵禦變化的緊耦合是不合適的。在這種情況下,如何將"行爲請求者"與"行爲實現者"解耦?將一組行爲抽象爲對象,可以實現二者之間的松耦合

命令模式(Command)模式的組成

客戶角色:定創建一個具體命令對象,並確定其接收者。

命令角色:申明一個給所有具體命令類的抽象接口,這是一個抽象角色,通常由一個接口或者抽象類實現。

具體命令角色:定義一個接收者和行爲之間的弱耦合,實現execute方法(執行方法,方法名可以自定義),負責調用接收者的相應操作。

請求者角色:負責調用命令對象執行請求。實際應用中一般需要實現對命令和接收者進行匹配分發處理。

接收者角色:負責具體實施和執行一個請求。

 

代碼實現(Java實現)

命令角色:

package pattern.command;

public interface Command {
    public void execute();

}
 

接收者角色:

package pattern.command;

public class Receiver {
    public void doAction() {
        System.out.println("執行操作");
    }
}
 

具體命令角色:

package pattern.command;

public class ConcreteCommand implements Command {
    private Receiver receiver;
    
    public ConcreteCommand(Receiver receiver) {
        this.receiver = receiver;
    }
    @Override
    public void execute() {
        receiver.doAction();
    }

}

請求者角色:

package pattern.command;

public class Invoker {
    private Command command;
    public Invoker(Command command) {
        this.command = command;
    }
    
    public void doInvokerAction() {
        command.execute();
    }
}
 

客戶角色:

package pattern.command;

public class Client {
    public static void main(String[] args) {
        Receiver receiver = new Receiver();
        Command command = new ConcreteCommand(receiver);
        Invoker invoker = new Invoker(command);
        invoker.doInvokerAction();
    }
}
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章