设计模式 - 命令模式
命令模式:将命令的请求和执行解耦,使面向客户端的命令参数化
核心:(组合)控制器(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!");
}
}
欢迎疑问、期待评论、感谢指点 -- kiqi,愿同您为友
-- 星河有灿灿,愿与之辉