命令设计模式
2016-07-04 13:22
357 查看
基本类图:
![](https://img-blog.csdn.net/20160704132157098?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
命令模式比较简单,具体的说就是:receiver中执行完成了某个功能,但是我们又不想把它暴露给Client,这时候我们就通过Command来封装Receiver。最后客户端Client中就只会出现Invoker和Command的子类。
Invoker中应该有2个基本的方法:
1, setCommand(Command command); 设置命令
2, Action(); 执行命令,其实就是调用command的Excute()函数。
比如下面的代码:
</pre><pre name="code" class="cpp">void Main(){
Invoker invoker = new Invoker();
ConcreteCommand command = new ConcreteCommand ();
invoker.setCommand(command );
invoker.Action();
}如此,客户端高层就和底层的receiver之前基本上没什么耦合了。
需要增加新功能的话,只需要扩展Command子类就行了。这里就会有个问题,到时候Command子类会膨胀的很厉害,
所以大家还得根据自己的实际情况来确定是否适合使用命令模式。
命令模式比较简单,具体的说就是:receiver中执行完成了某个功能,但是我们又不想把它暴露给Client,这时候我们就通过Command来封装Receiver。最后客户端Client中就只会出现Invoker和Command的子类。
Invoker中应该有2个基本的方法:
1, setCommand(Command command); 设置命令
2, Action(); 执行命令,其实就是调用command的Excute()函数。
比如下面的代码:
</pre><pre name="code" class="cpp">void Main(){
Invoker invoker = new Invoker();
ConcreteCommand command = new ConcreteCommand ();
invoker.setCommand(command );
invoker.Action();
}如此,客户端高层就和底层的receiver之前基本上没什么耦合了。
需要增加新功能的话,只需要扩展Command子类就行了。这里就会有个问题,到时候Command子类会膨胀的很厉害,
所以大家还得根据自己的实际情况来确定是否适合使用命令模式。
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- Ruby设计模式编程之适配器模式实战攻略
- 实例讲解Ruby使用设计模式中的装饰器模式的方法
- 设计模式中的模板方法模式在Ruby中的应用实例两则
- Ruby设计模式编程中对外观模式的应用实例分析
- 实例解析Ruby设计模式编程中Strategy策略模式的使用
- Ruby中使用设计模式中的简单工厂模式和工厂方法模式
- Ruby使用设计模式中的代理模式与装饰模式的代码实例
- 详解组合模式的结构及其在Ruby设计模式编程中的运用
- C# 设计模式系列教程-建造者模式
- C#编程中使用设计模式中的原型模式的实例讲解
- 使用设计模式中的工厂方法模式进行C#编程的示例讲解
- 实例解析C#设计模式编程中简单工厂模式的使用
- 详解C#设计模式编程中生成器模式的使用