行为型模式之二——命令模式
2015-10-29 12:34
253 查看
模式定义
命令模式(Command Pattern):将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为型模式。模式结构
命令模式的结构图如下所示:Command
抽象命令类一般是一个接口,在其中声明了用于执行请求的excute()等方法,通过这些方法可以调用请求接收者的相关操作。
ConcreteCommand
具体命令类是抽象命令类的子类,实现了在抽象命令类中声明的方法,它对应具体的接收者对象,绑定接收者对象的动作。在实现exceute()方法时,将调用接收者对象的相关操作
Invoker
调用者即请求的发送者,它通过命令对象对象来执行请求。一个调用者并不需要在设计时确定其接收者,因此它只与抽象命令类之间存在关联关系。在程序运行时将调用具体命令对象的excute()方法,间接调用接收者的相关关系。
Receiver
接收者执行与请求相关的操作,它具体实现对请求的业务处理。
实例
电视机是请求的接收者,遥控器是请求的发送者,遥控器上有一些按钮,不同的按钮对应于电视机的不同操作。抽象命令角色由一个命令接口来扮演,有三个具体的命令类实现了抽象命令接口,这三个具体命令分别代表三种操作:打开电视机,关闭电视机,切换频道。显然,电视机遥控器就是一个典型的命令模式实例。该实例类图如下所示:
public class Television { public void open() { System.out.println("打开电视"); } public void close() { System.out.println("关闭电视"); } public void change() { System.out.println("切换频道"); } } public abstract class AbstractCommand { public abstract void execute(); } public class TVOpenCommand extends AbstractCommand { private Television tv; public TVOpenCommand() { tv = new Television(); } public void execute() { tv.open(); } } public class TVCloseCommand extends AbstractCommand { private Television tv; public TVCloseCommand() { tv = new Television(); } public void execute() { tv.close(); } } public class TVChangeCommand extends AbstractCommand { private Television tv; public TVChangeCommand() { tv = new Television(); } public void execute() { tv.change(); } } public class Controller { private AbstractCommand openCommand, closeCommand, changeCommand; public Controller(AbstractCommand openCMD, AbstractCommand closeCMD, AbstractCommand changeCMD) { this.openCommand = openCMD; this.closeCommand = closeCMD; this.changeCommand = changeCMD; } public void open() { openCommand.execute(); } public void close() { closeCommand.execute(); } public void change() { changeCommand.execute(); } }
相关文章推荐
- LeetCode N-Queens II
- 如何判断是否需要升级网站服务器带宽
- 夺命雷公狗jquery---37--DWZ左侧折叠菜单实现完整版
- 第一件实用作品,点阵大屏语音感应时计——作品展示
- 仿keep休息倒计时——自定义控件
- android布局属性详解
- 基于物理着色(三)- Disney和UE4的实现
- Android学习之任务与返回栈
- 事务的四个特性:ACID
- JQuery日历插件My97DatePicker日期范围限制
- 简单的例子说明filter的执行顺序
- (摘抄)HTTP 协议详解
- 基于物理着色(二)- Microfacet材质和多层材质
- 细说JAVA反射
- 重叠IO overlapped I/O 运用详解
- 基于物理着色(一)
- android处理url中的特殊字符
- sublime text 2 ubuntu安装及插件管理
- iOS 读取.strings 文件
- Log4J日志管理类使用详解 (转)