命令模式:将“请求”封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。
用到的原则:
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中,只需要给它一名命令就去执行,不管这个命令的具体类型是什么。

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

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

最新文章

  1. 16.(转) Android之Support v4、v7、v13的区别和应用场景
  2. Xenomai
  3. c#入门实例
  4. Windows下将txt导入MySQL及远程连接设置
  5. linux shell在while中用read从键盘输入
  6. C#调用API函数EnumWindows枚举窗口的方法
  7. HTML中meta的应用
  8. 使用 System.Transactions 进行事物管理
  9. ProjectManager Beta 2 项目管理器发布
  10. 七月SSL行业新闻回顾
  11. 使用milang出错:LookupError: unknown encoding: idna
  12. SQLServer2016 AlwaysOn AG基于工作组的搭建笔记
  13. excel 错误提示以及其他基础知识
  14. 01.如何把.py文件打包成为exe,重点讲解pyinstaller的用法
  15. QThreadPool线程池的使用,线程与Widget通过信号与槽的方式通信。
  16. [100]find&xargs命令
  17. 运行inetmgr提示“找不到文件”无法打开IIS管理器的解决办法
  18. Spark SQL的整体实现逻辑
  19. 【HNOI】 小A的树 tree-dp
  20. caffe Python API 之激活函数ReLU

热门文章

  1. Nodejs开发(2.连接MongoDB)
  2. Android百分比布局支持库介绍——com.android.support:percent(转)
  3. Diablo2 1.13版&PlugY10.00 男巫存档
  4. java程序中调用Linux命令Windows命令
  5. RDIFramework.NET ━ Web中打印的各种方案参考-欢迎补充
  6. 线性时间的排序算法--桶排序(以leetcode164. Maximum Gap为例讲解)
  7. svg学习(七)polygon
  8. 笔记本自带 WiFi 功能
  9. js中获取当前时间
  10. paper 95:《模式识别和机器学习》资源