2011年(109)
分类: 系统运维
2011-07-22 17:06:07
命令模式是从界面设计中提取出来的一种分离耦合,提高重用
的方法。被认为是最优雅而且简单的模式,它的应用范围非常广泛。让我们一起来认识下它
吧。
先从起源说起。在设计界面时,大家可以注意到这样的一种情况,同样的菜单控件,在
不同的应用环境中的功能是完全不同的;而菜单选项的某个功能可能和鼠标右键的某个功能
完全一致。按照最差、最原始的设计,这些不同功能的菜单、或者右键弹出菜单是要分开来
实现的,你可以想象一下,文档上面的一排菜单要实现出多少个“形似神非”的菜单类
来?这完全是行不通的。这时,就要运用分离变化与不变的因素,将菜单触发的功能分离出
来,而制作菜单的时候只是提供一个统一的触发接口。这样修改设计后,功能点可以被不同
的菜单或者右键重用;而且菜单控件也可以去除变化因素,很大的提高了重用;而且分离了
显示逻辑和业务逻辑的耦合。这便是命令模式的雏形。
下面我们将仔细的讨论下命令模式。
二、定义与结构
《》中命令模式的定义为:将一个请求封装为一个对象,从而使你可用不同的
请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。
看起来,命令模式好像神通广大。其实命令模式的以上功能还要看你是怎么写的——程
序总是程序员写出来的,你写啥它才能干啥:)
在我看来,其实命令模式像很多设计模式一样——通过在你的请求和处理之间加上了一
个中间人的角色,来达到分离耦合的目的。通过对中间人角色的特殊设计来形成不同的模式。
当然命令模式就是一种特殊设计的结果。
看下命令模式是有哪些角色来组成的吧。
1) 命令角色(Command):声明执行操作的接口。有java 接口或者抽象类来实现。
2) 具体命令角色(Concrete Command):将一个接收者对象绑定于一个动作;调用接收
者相应的操作,以实现命令角色声明的执行操作的接口。
3) 客户角色(Client):创建一个具体命令对象(并可以设定它的接收者)。
4) 请求者角色():调用命令对象执行这个请求。
5) 接收者角色(Receiver):知道如何实施与执行一个请求相关的操作。任何类都可能作
为一个接收者。