代码改变世界

命令模式

2011-07-22 17:10  卫佳  阅读(195)  评论(0编辑  收藏  举报


命令模式是从界面设计中提取出来的一种分离耦合,提高重用 

的方法。被认为是最优雅而且简单的模式,它的应用范围非常广泛。让我们一起来认识下它 

吧。 

    先从起源说起。在设计界面时,大家可以注意到这样的一种情况,同样的菜单控件,在 

不同的应用环境中的功能是完全不同的;而菜单选项的某个功能可能和鼠标右键的某个功能 

完全一致。按照最差、最原始的设计,这些不同功能的菜单、或者右键弹出菜单是要分开来 

实现的,你可以想象一下,Cheap sunglasses wholesale文档上面的一排菜单要实现出多少个形似神非的菜单类 

来?这完全是行不通的。这时,就要运用分离变化与不变的因素,将菜单触发的功能分离出 

来,而制作菜单的时候只是提供一个统一的触发接口。这样修改设计后,功能点可以被不同 

的菜单或者右键重用;而且菜单控件也可以去除变化因素,很大的提高了重用;而且分离了 

显示逻辑和业务逻辑的耦合。这便是命令模式的雏形。 

    下面我们将仔细的讨论下命令模式。 

二、定义与结构 

     《Sunglasses Wholesale》中命令模式的定义为:将一个请求封装为一个对象,从而使你可用不同的 

请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。 

    看起来,命令模式好像神通广大。其实命令模式的以上功能还要看你是怎么写的——程 

序总是程序员写出来的,你写啥它才能干啥:) 

    在我看来,其实命令模式像很多设计模式一样——通过在你的请求和处理之间加上了一 

个中间人的角色,来达到分离耦合的目的。通过对中间人角色的特殊设计来形成不同的模式。 

当然命令模式就是一种特殊设计的结果。 

    看下命令模式是有哪些角色来组成的吧。 

1)  命令角色(Command):声明执行操作的接口。有java 接口或者抽象类来实现。 

2)  具体命令角色(Concrete   Command):将一个接收者对象绑定于一个动作;调用接收 

    者相应的操作,以实现命令角色声明的执行操作的接口。 

3)  客户角色(Client):创建一个具体命令对象(并可以设定它的接收者)。 

4)  请求者角色(Best price sunglasses):调用命令对象执行这个请求。 

5)  接收者角色(Receiver):知道如何实施与执行一个请求相关的操作。任何类都可能作 

    为一个接收者。