设计模式学习专栏五--------命令模式

2019-03-11  本文已影响0人  你的头发真的好长

设计模式学习专栏五--------命令模式

场景


设计一个智能遥控器,遥控器上有7个插槽 , 每个插槽(某设备具体供应商)对应两个按钮 on , off ,以及一个全局的撤销操作undo.

image

较差的实现方式

判断每个插槽对应的具体厂商是谁, 然后做出对应的动作

if(slot1 == Light){
    light.on()
}else if(slot1 == Hottub){
    hottub.on()
}else if(slot1 == TV){
    tv.on();
}
...

如何解决


对象村餐厅的例子

image

把餐厅想象成设计模式的一种模型 , 这个模型允许通过"封装请求的命令"(订单)将 "发出请求的对象"(女招待, "订单来啦")"接收与执行这些请求的对象"(厨师) 分隔开 .

从餐厅到命令模式

image

命令模式总览


定义: 将请求封装成对象(订单),将发出请求的对象(服务员/按钮)和执行请求的对象(厨师/具体供应商)解耦 , 也可以支持撤销操作

image
- "Party模式" :  封装一次请求中的批量操作 (按下一个按钮,同时弄暗灯光 , 打开音响和电视,设置好DVD)

  ```java
  public class MacroCommand implements Command {
    Command[] commands;
   
    public MacroCommand(Command[] commands) {
        this.commands = commands;
    }
   
    public void execute() {
        for (int i = 0; i < commands.length; i++) {
            commands[i].execute();
        }
    }
  }
  ```

案例代码部分

image

参考

​ 书籍: HeadFirst设计模式

​ 代码参考地址: 我就是那个地址

上一篇下一篇

猜你喜欢

热点阅读