首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

地方话设计模式_命令模式1

2012-11-14 
白话设计模式_命令模式1??????? 先看例子:??????? Invoker:命令的调用者,但却不直接与命令的实施者Receive

白话设计模式_命令模式1

??????? 先看例子:


??????? Invoker:命令的调用者,但却不直接与命令的实施者Receiver关联,而是关联一个Command引用;

????? Command:(一般用接口)表示命令,给所有需要执行的实际操作一个统一的“接口”;

????? ConcreteCommand: 具体的操作命令,实现Command接口,同时关联一个Receiver,表示作用在哪个实施者上面的操作;

????? Receiver:命令的实施者,可将它的每一种操作都封装成一个独立的命令对象,比如LightOnCommand、LightOffCommand、LightXXXCommand等,它们都实现Command接口,从而有一个共同的身份Command;

????? CommandLoader: 负责组装Reveiver和ConceteCommand,实际的客户端操作Invoker对象。

????? 仔细分析命令模式,可以看出它有很多好处:

1、请求的调用者与请求的实施者解耦

????? Invoker(请求调用者)不用像以前一样知道每一Receiver(请求的实施者),假如我们要扩展Light,例如添加一个dim()方法调低亮度,RemoteControl完全不用修改,只用添加一个LightDimCommand命令,在把它动态组装到ConreteCommand中即可。

2、可实现撤销功能

????? 不使用命令模式时,light.on()就是一个原子操作,执行完了就完了,而命令模式中由于我们把这个操作封装进了一个对象中,而对象是一个实实在在的有状态的东西,我们可以把它保存起来,这样即使操作结束,由于我们之前保存了那个命令对象,我们也就知道它到底干了什么,当然也就可以撤销了。

????? 我们甚至可以多级撤销,只要将命令对象存放进一个stack栈中,之后便可以轻松取出来。


总结:

?????? 命令模式的关键点在于:共同的接口Command、用Command对象封装每一个请求。另外,对象有状态、可以保存,以至于我们可以拿这些对象做一些扩展的功能。

?

热点排行