1. 程式人生 > >【設計模式學習筆記】命令模式

【設計模式學習筆記】命令模式

命令模式主要解決行為請求者與行為執行者的強耦合而出現的一種行為模式。通常模式有三種角色,命令執行者,命令,命令入口。

文章目錄

          1.1 命令的執行者

          1.2 命令模組

          1.3 命令入口

          1.4 測試

          

1.5 結果

          參考

1.1 命令的執行者

為了易於擴充套件,我們將執行者的行為抽象為介面

package command;

/************************************************
 *@ClassName : Invoker
 *@Description : TODO
 *@Author : NikolaZhang
 *@Date : 【2018/12/9 0009 19:52】
 *@Version : 1.0.0
 *************************************************/

public interface GroupI {
    void add();
    void delete();
}

建立幾個執行這類 

package command;

/************************************************
 *@ClassName : Invoker
 *@Description : TODO
 *@Author : NikolaZhang
 *@Date : 【2018/12/9 0009 19:52】
 *@Version : 1.0.0
 *************************************************/

public class WorkGroup implements GroupI{
    @Override
    public void add() {
        System.out.println("工作組根據命令新增零件");
    }

    @Override
    public void delete() {
        System.out.println("工作組根據命令刪除零件");
    }
}


1.2 命令模組

命令模組更具輸入的命令,呼叫對應的模組執行命令
同樣為了易於擴充套件我們將其做成一個抽象類。

package command;

/************************************************
 *@ClassName : Invoker
 *@Description : TODO
 *@Author : NikolaZhang
 *@Date : 【2018/12/9 0009 19:52】
 *@Version : 1.0.0
 *************************************************/

public abstract class CommandA {
    protected WorkGroup workGroup = new WorkGroup();
    protected DesignGroup designGroup = new DesignGroup();

    public abstract void execute(String str) ;


}

 子類:

package command;

/************************************************
 *@ClassName : DesignCommand
 *@Description : TODO
 *@Author : NikolaZhang
 *@Date : 【2018/12/9 0009 20:08】
 *@Version : 1.0.0
 *************************************************/

public class WorkCommand extends CommandA{

    @Override
    public void execute(String str) {
        if("add".equals(str)){
            super.workGroup.add();
        } else if("delete".equals(str)){
            super.workGroup.delete();
        }else {
            System.out.println("工作組拒絕該命令");
        }

    }
}

1.3 命令入口

package command;

/************************************************
 *@ClassName : Invoker
 *@Description : TODO
 *@Author : NikolaZhang
 *@Date : 【2018/12/9 0009 19:52】
 *@Version : 1.0.0
 *************************************************/

public class Invoker {
    private CommandA commandA;

    public void setCommandA(CommandA commandA) {
        this.commandA = commandA;
    }

    public void action(String str){
        commandA.execute(str);
    }
}

 1.4 測試

package command;

/************************************************
 *@ClassName : Test
 *@Description : TODO
 *@Author : NikolaZhang
 *@Date : 【2018/12/9 0009 20:11】
 *@Version : 1.0.0
 *************************************************/

public class Test {
    public static void main(String[] args) {
        Invoker invoker = new Invoker();

        CommandA commandWork = new WorkCommand();
        invoker.setCommandA(commandWork);
        invoker.action("add");
        invoker.action("delete");
        invoker.action("update");

    }
}

 1.5 結果

 

參考

【菜鳥教程】:http://www.runoob.com/design-pattern/command-pattern.html

本文原文地址:https://blog.csdn.net/baidu_30325009/article/details/85018497