zoukankan      html  css  js  c++  java
  • Head First 设计模式 --6 命令模式

    命令模式:将“请求”封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。
    用到的原则:
    1、封装变化
    2、组合优于继承
    3、针对接口编程,不能针对实现编程
    4、解耦
    5、类对修改关闭,对扩展开放
    6、依赖抽象,不依赖具体

    命令模式很好理解,直接看代码

    interface Commend {
      public void execute();
    }
    
    class Light {
      public void on() {
        System.out.println("light on");
      }
    
      public void off() {
        System.out.println("light off");
      }
    }
    
    class LintOnCommend implements Commend {
      Light light;
    
      public LintOnCommend(Light light) {
        this.light = light;
      }
    
      @Override
      public void execute() {
        light.on();
      }
    
    }
    
    class SimpleRemoteControl {
      Commend commend;
    
      public SimpleRemoteControl() {}
    
      public void setCommend(Commend commend) {
        this.commend = commend;
      }
    
      public void buttonWasPressed() {
        commend.execute();
      }
    }
    
    public class Test {
      public static void main(String[] args) {
        SimpleRemoteControl control = new SimpleRemoteControl();
        Light light = new Light();
        LintOnCommend onCommend = new LintOnCommend(light);
    
        control.setCommend(onCommend);
        control.buttonWasPressed();
      }
    }

    类图

    命令模式主要就是让类具有单一权责,每个类只干自己的事,不关心具体的类型。就像SimpleRemoteControl中,只需要给它一名命令就去执行,不管这个命令的具体类型是什么。

    还有要说的是设计技巧,也就是需要好好理解一下类图。

    书中第六章还有更加高大上的例子,简单的实现了遥控器的实现原理还有回到上一个命令的方法。也有将一组命令组合到一个命令的方法,然后利用这个原理可以实现队列请求,日志请求。我只是学习一下设计模式,并没有打算把整个书抄下来。

  • 相关阅读:
    多线程篇七:通过Callable和Future获取线程池中单个务完成后的结果
    多线程篇六:线程池
    微服务学习和认识
    多线程篇五:多个线程访问共享对象和数据的方式
    多线程篇四:ThreadLocal实现线程范围内变量共享
    多线程篇三:线程同步
    多线程篇二:定时任务
    多线程篇一:传统线程实现方式
    Jms学习篇二:ActiveMQ
    04-运算符
  • 原文地址:https://www.cnblogs.com/badboyf/p/6212769.html
Copyright © 2011-2022 走看看