1.命令模式介绍
命令模式(Order Pattern),是十一大行为型设计模式之一。
命令模式相对于其他的设计模式来说,没有太多的条条框框,相对于其他设计模式来说更为灵活多变。我们平时接触较多的命令模式入程序菜单命令,点击“关机”命令,系统会执行一系列的操作,用户不用其中的过程。命令模式就是将一系列的方法调用封装,用户只需要调用一个方法执行,那么所有这些被封装的方法就会被挨个执行调用。
2.命令模式的定义
将一个请求封装成一个对象,从而让用户使用不同的请求把客户端参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。
3.命令模式的使用场景
需要抽象出待执行的动作,然后以参数的形式提供出来——类似于过程设计中的回调机制,而命令模式正是回调机制的一个面向对象的替代品。
在不同的时刻指定,排列和执行请求。一个命令对象可以有与初始请求无关的生存期。
需要支持取消操作。
支持修改日志功能,这样当系统崩溃时,这些修改可以被重做一遍。
需要支持事务操作。
4.UML类图
UML类图5.角色介绍
1.Receive:接收者角色。
该类负责具体实施或执行一个请求,就是执行具体逻辑的角色。任何一个类都可以成为一个接收者,而在接收者类中封装具体的操作逻辑方法我们则称之为行动方法。
2.Command:命令角色。
定义所有具体命令类的抽象接口。
3.ConcreteCommand:具体命令角色。
该类实现了Command接口,在execute方法中调用接收者角色的相关方法,在接收者和命令执行的具体行为之间加以弱耦合。
4.Invoker:请求者角色。
该类持有具体命令者对象的引用。该类的职责就是调用命令对象执行具体的请求,相关的方法我们称为行动方法。
5.client:客户端。
6.模板
接收者类 抽象命令接口 具体命令类 请求者类 客户类7.例子
接收者角色(上图) 命令者抽象(上图) 具体命令者(上图) 具体命令者(上图) 具体命令者(上图) 具体命令者(上图) 请求者类(上图)例子分析
TetriMachine类为接收者类,是整个命令模式中唯一处理具体代码逻辑的地方,其他的类直接或间接的调用到该方法,这就是接收者角色,处理具体的逻辑。接收者类只是一个普通的类,任何类都可以作为接收者。
具体命令者里持有一个接收者对象的引用,在命令执行方法里调用接收者的方法。
请求者类里持有对具体命令者对象的引用,把一个具体命令者封装成一个对象,调用命令对象执行具体的请求。
8.Android源码命令模式
Android事件输入系统。
9.总结
命令模式优点:更弱的耦合性,更灵活的控制性以及更好的扩展性。缺点则是类的膨胀。
网友评论