91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java命令設計模式怎么實現

發布時間:2023-04-26 10:07:29 來源:億速云 閱讀:130 作者:zzz 欄目:開發技術

這篇文章主要講解了“Java命令設計模式怎么實現”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java命令設計模式怎么實現”吧!

介紹

Java命令模式(Command Pattern)是一種行為型設計模式,它將請求封裝成一個對象,從而使不同的請求可以進行參數化,并支持請求的排隊,記錄日志,撤銷操作等.

在命令模式中,將命令請求者(Invoker),命令接收者(Receiver)和命令對象(Command)進行了解耦,使得它們可以獨立地變化.具體的說,命令對象封裝了一個特定的請求和其對應的操作,Invoker對象負責調用命令來執行請求,而Receiver對象則負責實際執行命令所代表的操作.

在Java中,可以通過定義一個接口來定義命令對象的基本行為,然后再定義具體的命令對象實現該接口.Invoker對象可以包含一個或多個命令對象,可以通過調用命令對象的execute()方法來執行相應的命令.而Receiver對象則負責實際執行命令所代表的操作,其具體實現可以再命令對象的execute()方法中調用.

實現

命令對象接口

public interface Command {
    /**
     * 執行
     */
    void execute();
    /**
     * 撤銷
     */
    void undo();
}

具體命令對象

public class ConcreteCommand1 implements Command {
    private Receiver receiver;
    private boolean isExecute;
    public ConcreteCommand1(Receiver receiver) {
        this.receiver = receiver;
    }
    /**
     * 執行
     */
    @Override
    public void execute() {
        receiver.action1();
        isExecute = true;
    }
    /**
     * 撤銷
     */
    @Override
    public void undo() {
        if (isExecute) {
            receiver.undoAction1();
            isExecute = false;
        }
    }
}
public class ConcreteCommand2 implements Command {
    private Receiver receiver;
    private boolean isExecute;
    public ConcreteCommand2(Receiver receiver) {
        this.receiver = receiver;
    }
    /**
     * 執行
     */
    @Override
    public void execute() {
        receiver.action2();
        isExecute = true;
    }
    /**
     * 撤銷
     */
    @Override
    public void undo() {
        if (isExecute) {
            receiver.undoAction2();
            isExecute = false;
        }
    }
}

命令接收者

public class Receiver {
    public void action1() {
        System.out.println("Receiver.action1() 被調用...");
    }
    public void action2() {
        System.out.println("Receiver.action2() 被調用...");
    }
    public void undoAction1(){
        System.out.println("Receiver.undoAction1() 被調用...");
    }
    public void undoAction2(){
        System.out.println("Receiver.undoAction2() 被調用...");
    }
}

命令請求者

public class Invoker {
    private List<Command> commandList = new ArrayList<>();
    /**
     * 添加命令
     *
     * @param command
     */
    public void addCommand(Command command) {
        commandList.add(command);
    }
    /**
     * 執行命令
     */
    public void executeCommands() {
        commandList.forEach(Command::execute);
    }
    /**
     * 撤銷命令
     */
    public void undoCommands() {
        for (int i = commandList.size() - 1; i >= 0; i--) {
            commandList.get(i).undo();
        }
    }
}

測試

public class Demo {
    public static void main(String[] args) {
        Receiver receiver = new Receiver();
        Command command1 = new ConcreteCommand1(receiver);
        Command command2 = new ConcreteCommand2(receiver);
        Invoker invoker  = new Invoker();
        invoker.addCommand(command1);
        invoker.addCommand(command2);
        invoker.executeCommands();
        invoker.undoCommands();
    }
}

Java命令設計模式怎么實現

再示例代碼中,定義了兩個具體的命令對象實現,分別是ConcreteCommand1和ConcreteCommand2,它們都實現了Command接口,并且支持撤銷操作.每個ConcreteCommand對象內部維護了一個boolean類型的isExecute變量,表示該命令是否已經執行過.如果execute()方法中,執行具體的命令操作,并將isExecute設為true.再undo()方法中,如果該命令已經執行過,則執行與execute()方法相反的操作,并將isExecute設為false.Receiver類是命令接收者,它實際執行命令所代表的操作.Invoker類中包含了一個Command對象列表,它通過addCommand()方法向其中添加具體的Command對象,executeCommand()用于執行所有添加的Command對象,而undoCommands()方法則用于撤銷所有添加的Command對象,執行與撤銷的順序正好相反.

感謝各位的閱讀,以上就是“Java命令設計模式怎么實現”的內容了,經過本文的學習后,相信大家對Java命令設計模式怎么實現這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

邯郸县| 靖宇县| 荣成市| 永兴县| 山东| 额敏县| 乌拉特中旗| 洱源县| 盐山县| 渝北区| 福贡县| 长岭县| 措勤县| 阜平县| 南丹县| 肇州县| 屏东县| 潼南县| 杨浦区| 和顺县| 汪清县| 孟州市| 城口县| 温宿县| 北票市| 铜山县| 大悟县| 武冈市| 桃园县| 大庆市| 汝城县| 错那县| 台北市| 武陟县| 安溪县| 苍南县| 玉环县| 樟树市| 建始县| 五指山市| 博爱县|