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中,只需要给它一名命令就去执行,不管这个命令的具体类型是什么。

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

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

  • 相关阅读:
    uva489HangMan
    uva1339Ancient Cipher
    uva11292 Dragon of Loowater
    数字图像处理中所用数学工具2---线性操作与非线性操作
    数字图像处理中所用数学工具1---阵列与矩阵操作
    像素的邻接性、连通性与距离度量
    Matlab 数字图像处理1---图像的收缩和放大
    FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(me
    MapRdeuce&Yarn的工作机制(YarnChild是什么)
    Hive介绍及安装
  • 原文地址:https://www.cnblogs.com/badboyf/p/6212769.html
Copyright © 2011-2022 走看看