命令设计模式

命令设计模式:将一个操作封装到对象中,然后创建多个这种带有不同操作的对象(它们都执行了一个相同接口)并将它们封装到一个类中,然后该类根据不同的入参调用不同的对象执行其对应的操作。

命令设计模式与策略模式的区别

-- 相同点:

-- 毫无疑问,第一个相同点肯定是:封装变化。策略模式封装算法的变法,命令模式封装请求的变化。

-- 都使用组合来实现功能,达到解耦的目的。

-- 如果我们将命令模式做更高层次上的抽象,可以将它看成是一种策略模式。如:我们将Client与

Invoker封装到一起,将Concrete Command与Receiver封装到一起。

-- 策略(Strategy)模式:

-- 策略模式实际上比较简单。Head First Design Pattern介绍的第一个模式就是策略模式。

-- GoF定义:定义一组算法,把他们封装起来,并且是他们可以相互替换。该模式使算法可以独立于使

用它的客户而变化。

-- 实现:其实一句话就可以说明该模式的精髓:面向抽象编程。用户维护一个该系列算法的统一接口,

可以互相替换的算法实现该接口。从而将客户与具体的算法实现解耦。

-- 命令(Command)模式:

-- 命令模式要比策略模式复杂一些。这可以从命令模式结构图(在专门介绍命令模式的博文中有)中

所涉及的角色数量可做出不印证。

-- 命令模式涉及的角色有:Client, Command Interface, Concrete Command, Invoker以及真正处理请

求的Receiver;而策略模式只需要:Client, Strategy Interface以及Concrete Strategy.

-- GoF定义:将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化;对请求排队或

记录请求日志,以及支持可撤销的操作。

-- 实现:Client创建一个Command,并为Command绑定一个Receiver。将该Command传给一个Invoker,当

Invoker被唤醒时,调用Command的Execute方法,而Execute方法则最终调用Receiver的相关方法完成

请求。当然Client中可以维护一个Command队列,Command中也可以实现一个undo操作。从而实现对操

作的撤销与重做。

-- 结论:命令模式可以被抽象地视为一种策略模式。但是显然命令模式处理的是更为复杂的情况。或许我们

可以这么讲:策略模式聚焦的是对相同请求更换解决方案的灵活性;而命令模式聚焦的是对多请求变化的

封装以及对相同请求不同的请求形式解决方法的可复用性(例如GOFDP中提出的文本编辑器来自不同按钮/菜

单项的请求实现相同的功能)。

参见:

http://blog.csdn.net/wsh622827/article/details/4759368

http://www.cnblogs.com/devinzhang/archive/2012/01/06/2315235.html

http://blog.sina.com.cn/s/blog_67fdef900101g0z3.html

时间: 2024-10-31 21:13:39

命令设计模式的相关文章

iOS常用设计模式——命令设计模式

命令设计模式详解 命令设计模式详解 基本概念 NSInvocation的使用 命令模式的体现 基本概念 命令设计模式将一个请求或行动作封装为对象.这个封装请求比原始的请求要灵活并且可以在对象之前被传递,存储,动态修改或者放进队列里面.苹果公司实现这种模式使用Target-Action机制和Invocation. NSInvocation的使用 在 iOS中可以直接调用 某个对象的消息 方式有2种 一种是performSelector:withObject:再一种就是NSInvocation第一种

设计模式(11)-----命令设计模式

把命令封装成一个命令对象,使请求者和被请求者完全解耦.我们先来看一下类图: 下面我们来看代码 Invoker==SimpleRemoteControl public class SimpleRemoteControl { Command slot;// 有一个插槽持有命令,而这个命令控制着设备 public SimpleRemoteControl() { } public void setCommand(Command command) { slot = command;     } publi

Design Pattern Command 命令设计模式

本设计模式就是利用不同的类包起不同的命令,达到使用什么命令就实现什么操作. 也可以进一步利用map和自己喜欢的命令词对接起来. 一个执行类实际上已经包含了所有需要的操作了,如: class SuperMaker { public: string makeCar() { return "Car"; } string makePlane() { return "Plane"; } }; 这里有两个命令,下面要做的就是使用不同的类把需要的命令包含起来. class Com

使用 C# (.NET Core) 实现命令设计模式 (Command Pattern)

本文的概念内容来自深入浅出设计模式一书. 项目需求 有这样一个可编程的新型遥控器, 它有7个可编程插槽, 每个插槽可连接不同的家用电器设备. 每个插槽对应两个按钮: 开, 关(ON, OFF). 此外还有一个全局的取消按钮(UNDO). 现在客户想使用这个遥控器来控制不同厂家的家用电器, 例如电灯, 热水器, 风扇, 音响等等. 客户提出让我编写一个接口, 可以让这个遥控器控制插在插槽上的一个或一组设备. 看一下目前各家厂商都有哪些家用电器??: 问题来了, 这些家用电器并没有共同的标准....

[设计模式]Netd中的命令设计模式,NetworkManagementService中的监听者模式

命令模式中有如下的角色: (1)调用者(invoker) (2)命令接收者(receiver) (3)客户端(client) (4)命令对象(command) 1 public interface Command { 2 public void execute(); 3 } 4 public class ConcreteCommand implements Command { 5 6 private Receiver receiver = null; 7 private String state

iOS设计模式--备忘录设计模式与命令设计模式

何为备忘录模式? 在响应某些事件时,应用程序需要保存自身的状态,比如当用户保存文档或程序退出时.例如,游戏退出之前,可能需要保存当前会话的状态,如游戏等级.敌人数量.可用武器的种类等.游戏再次打开时,玩家可以从离开的地方接着玩.很多时候,保存程序的状态真的不需要什么特别巧妙的方法.任何简单有效的方法都可以,但是同时,保存信息应该只对原始程序有意义.原始程序应该是能够解码它所保存文档中的信息的唯一实体.这就是备忘录模式应用于游戏.文字处理等程序的软件设计中的方式,这些程序需要保存当前上下文的复杂状

8.2.2 命令设计模式(The command design pattern)

命令模式(commandpattern)所描述的方法,表示在应用程序中的动作,相对于前一个模式,它常用于参数化已知的行为(比如,筛选列表)但缺少部分(条件),而命令模式经常保存某些"工作单元",能够在以后调用.我们经常看到命令集合,用来描述用户可以选择处理或操作的步骤.看一下图8.2,就会认识到,接口看起来像可以用函数替换的很好候选. 图8.2 Invoker 保存实现 Command 接口类的集合.当调用时,具体命令使用 Receiver 对象,它通常携带并修改了某些状态. 能够很容

设计模式(12)----- 命令设计模式(升级----一个开关控制多条命令)

我们先来看张类图 RemoteControl类修改一下 public class RemoteControl {     Command[] onCommands; Command[] offCommands; public RemoteControl() { onCommands = new Command[7];          offCommands = new Command[7]; Command noCommand = new NoCommand(); for (int i = 0

码农小汪-设计模式之-命令模式

大话设计模式的例子讲的非常的好,理解起来也方便!有时候忘了.想到这些特殊的例子感觉就是特别爽. 烤羊肉串带来的思考! 路边摊羊肉串: 老板,我这里排的比较先啊,我最先给钱.老板这个没有熟啊.我的是 辣的啊!老板没有放盐啊!场面混乱,已经分不清谁是谁的啊,人太多了.烤肉的质量也受到了影响,心情不好也就不好啊.烤肉的人心情受到了顾客的影响. 店面的烤肉 服务员,给我来两串羊肉串,2鸡翅,啤酒两瓶. 鸡翅没得啦,点别的吧,肉精吧.辣一点. 两者的比较啊: 路边的生意不稳定,往往就是那几个时间,客源不固