设计模式 - 命令模式

命令模式:将命令的请求和执行解耦,使面向客户端的命令参数化
核心:(组合)控制器(Controller) + 命令接口(IAction),实现命令参数化
角色:

  • 客户端:只需将命令参数发送给控制器即可
  • 控制器Controller:接受命令参数后,①完成命令参数到命令对象的解析,②调用对应命令对象的执行方法
  • 命令处理器ICommandAction/ConcreteCommandAction:命令的执行逻辑实现

general

public class Test {
    public static void main(String[] args) {
        // 客户端向invoker发送命令参数即可,具体的命令只需由invoker去调用实现。(解耦)
        Invoker controller = new Invoker();
        controller.actions(Invoker.Commands.PLAY);
        controller.actions(Invoker.Commands.TURN_UP);
        controller.actions(Invoker.Commands.TURN_DOWN);
        controller.actions(Invoker.Commands.STOP);
    }
}
// 负责命令的执行,其中可以增加一些控制逻辑(如:取消,暂停等)
public class Invoker {
    public void actions(ICommandAction command){
        command.execute();
    }

    // 命令列表,作为用户请求命令的入口
    public static class Commands{
        public final static ICommandAction PLAY = new PlayAction();
        public final static ICommandAction STOP = new StopAction();
        public final static ICommandAction TURN_DOWN = new TurnDownVoicesAction();
        public final static ICommandAction TURN_UP = new TurnUpVoicesAction();
    }
}
// 命令抽象,存放命令的具体实现逻辑
public interface ICommandAction {
    void execute();
}

public class PlayAction implements ICommandAction {
    @Override
    public void execute() {
        System.out.println("Start play!");
    }
}

public class StopAction implements ICommandAction {
    @Override
    public void execute() {
        System.out.println("Stop play!");
    }
}
posted @ 2020-11-29 22:48  祁奇  阅读(55)  评论(0编辑  收藏  举报