我眼中的命令模式
来源:互联网 发布:c语言实现串口通信 编辑:程序博客网 时间:2024/05/30 23:01
什么情况下用到命令模式
希望一列系的动作能够有计划的进行,可以进行保存,撤销等操作。将普通的任务改造成命令模式是很简单的。一般情况下,不要急于使用命令模式,真正需要的时候再去改造也是很容易的。
为什么后续的改造会很简单?原因在于,动作的执行者是对命令类是没有依赖的。举个例子,假如有正常的功能 类A,它很普通,对谁都没有依赖。这个时候,如果需要改造出一个命令类C,这个命令可以调用功能A,可以将类A以参数的方式传递给C,在C执行的时候,直接调用类A就好了。
类图
类图的关键有以下两点
1. 真正的功能类(也叫命令的接收者)对于命令类没有依赖
2. 有一个管家类用来组织这些命令
代码来解释
抽象的命令类(接口也可以)
public interface BaseCommand<T>{ //最基础的命令的抽象,只有两个功能,一个是指定接收者,一个是执行 public void execute(); //后面本来可以写一个基类的,但是发现这里使用泛型更好,这里没有对接收者做任何的约束,别人是属于正常功能的一部分 public void setReceiver(T receiver) ;}
具体的命令类
public class CloseCommand implements BaseCommand<BaseFunction>{ private BaseFunction baseFunction; @Override public void execute() { // TODO Auto-generated method stub baseFunction.close(); } @Override public void setReceiver(BaseFunction baseFuncation) { // TODO Auto-generated method stub this.baseFunction = baseFuncation; }}
具体的功能类
public class Light implements BaseFunction{ @Override public void open() { // TODO Auto-generated method stub Log.d("我是灯泡,执行打开操作"); } @Override public void close() { // TODO Auto-generated method stub Log.d("我是灯泡,执行关闭操作"); }}
调用的部分最有意思。light身为一个普通的类,是可以单独构造,单独调用的。
命令模式只是做了以下两步:
第一步,简单的用一个命令包装一下普通类
第二步,进一步封装,用一个调用的管理者来管理
BaseCommand openCommand = new OpenCommand(); openCommand.setReceiver(new Light());//放到一个调用者中一起调用 Invoker invoker = new Invoker(); invoker.addCommand(openCommand); invoker.addCommand(closeCommand); invoker.excuteCommand();
为了更好的查看,以代码的方式进行了记录.详情请查看DesignPattern中的 com.arron.pattern.command下的内容.戳我查看详情
阅读全文
0 0
- 我眼中的命令模式
- 我眼中的MVC模式
- 我眼中的策略模式
- 我眼中的设计模式
- 我眼中的MVC模式
- 我眼中的观察者模式
- 我眼中的代理模式
- 我眼中的设计模式-适配器模式
- 我眼中的设计模式 ----策略模式
- 我眼中的设计模式(一)
- 我眼中的设计模式(二)
- 我眼中的设计模式(三)
- 我眼中的设计模式(2)
- 我眼中的设计模式(3)
- 我眼中的设计模式(4)
- 我眼中的设计模式(5)
- 我眼中的设计模式(6)
- 我眼中的设计模式(7)
- poj1852 Ants
- Docker服务网格的优点,微服务
- 【新国产化】中国云平台能像阿里云一样,成为世界一哥吗?
- hihocoder 1586 : Minimum ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛
- 多条目加载
- 我眼中的命令模式
- 前端之编辑器webstorm
- Node.js入门教程:Node.js如何安装配置并部署一个网站
- 是
- OpenCV学习笔记(三):腐蚀
- matlab调用ziDAQ
- Linux使用sar进行性能分析
- 将特征点描述子输出成文本
- STL <list> 常用函数