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

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

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

 

posted @ 2016-12-22 20:40  bad_boy_f  阅读(279)  评论(0编辑  收藏  举报