设计模式(8)-命令模式详解(易懂)
2018-02-09 09:10
302 查看
命令模式的定义
命令模式,将一组行为抽象为对象,实现二者之间的松耦合。这就是命令模式(Command Pattern)。模型:
Invoker:调用者,就是接收到命令后负责调用
Receiver:接受者,也就是执行命令的人,最苦逼的
Command:命令者,封装好的命令类
下面通过通俗的实例来了解一下命令模式。
实例说明
既然命令,就拿“项目经理”-“开发人员”举例吧,比如有个外包的项目需要开发,开发完成后甲方要求改一改某个功能。下面用代码详细说明一下:1.首先定义一个抽象的Receiver,因为开发人员不止一个人
public abstract class AbstractReceiver { //写项目 public abstract void write(); //增删改项目 public abstract void change(); //提交程序 public abstract void ubmit(); }
2.定义具体的Receiver,这里假设有两个开发人员
public class ReceiverA extends AbstractReceiver{ @Override public void write() { Log.d("qzs","写代码"); } @Override public void change() { Log.d("qzs","改需求"); } @Override public void submit() { Log.d("qzs","提交"); } }
public class ReceiverB extends AbstractReceiver { @Override public void write() { Log.d("qzs","写代码"); } @Override public void change() { Log.d("qzs","改需求"); } @Override public void submit() { Log.d("qzs","提交"); } }
3.定义Command,命令类,也就是刚才说的甲方要求改一改某个功能的命令,假如此功能是开发人员A改:
public abstract class AbstractCommand { ReceiverA receiverA=new ReceiverA(); //开发人员A ReceiverB receiverB=new ReceiverB(); //开发人员B //执行 public abstract void excute(); }
public class ChangeFunctionCommand extends AbstractCommand { @Override public void excute() { receiverA.change(); receiverA.submit(); } }
4.定义Invoker类,也就是项目经理,负责安排调用
public class Invoker { private AbstractCommand command; //设置命令 public void setCommand(AbstractCommand command) { this.command = command; } // 执行命令 public void Action(){ command.excute(); }
5.调用
//定义一个项目经理-张三 Invoker ZHANGSAN=new Invoker(); //定义修改功能的命令并执行 AbstractCommand command=new ChangeFunctionCommand(); ZHANGSAN.setCommand(command); ZHANGSAN.Action();
运行后:
命令模式的优缺点及其他
1.优点:降低对象之间的耦合度
新的命令可以很容易地加入到系统中
可以比较容易地设计一个组合命令
调用同一方法实现不同的功能
2.缺点:
使用命令模式可能会导致某些系统有过多的具体命令类。因为针对每一个命令都需要设计一个具体命令类,因此某些系统可能需要大量具体命令类,这将影响命令模式的使用。
3.使用场景:
需要对行为进行记录,撤销,重做,事务处理时
需要抽象出待执行的动作,然后以参数的形式提供出来
4.附加:
如果有人问了,撤销的操作怎么做,其实很简单。在抽象的接收类中定义一个“撤销”的方法。然后再定义一个撤销Command来增加这个撤销命令就好了。
本文学习参考了《设计模式之禅》以及网上信息…
另外可以加入我的Android技术交流群:458739310
大家可以关注我的微信公众号:「安卓干货铺」一个有质量、有态度的公众号!
相关文章推荐
- 设计模式(4)-模板方法模式详解(易懂)
- 设计模式(5)-建造者模式详解(易懂)
- 设计模式(2)-工厂方法模式详解(易懂)
- 设计模式(9)-责任链模式详解(易懂)
- 设计模式(7)-原型模式详解(易懂)
- 设计模式(10)-装饰模式详解(易懂)
- 设计模式(3)-抽象工厂模式详解(易懂)
- 设计模式(6)-代理模式详解(易懂)
- android java 设计模式详解 Demo
- Java开发中的23种设计模式详解
- 详解Java设计模式中的生产-消费者模式及代码实现
- 设计模式——享元模式详解
- Java开发中的23种设计模式详解
- java23种设计模式详解
- 设计模式原则详解(转)
- 发中的23种设计模式详解
- java设计模式案例详解:代理模式
- 设计模式之--工厂模式详解(简单工厂、工厂方法、抽象工厂)
- Java开发中的23种设计模式详解
- Java设计模式详解之一工厂方法模式