命令模式
来源:互联网 发布:淘宝雪梨的质量 编辑:程序博客网 时间:2024/06/01 18:25
命令模式(Command),将一个请求封装为一个对象,从而使你
可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。
也就是可以把命令队列统一的封装起来由特定的执行者统一执行。
新加入的具体命令类不影响其他的类,因此增加新的具体命令类很容易。
另一方面,命令模式把请求一个操作对象与怎么执行一个操作对象分隔开来了。实现了解耦合的思想。
下面看基本类图:
如上图,我们要执行的具体操作在Receiver里面,里面有两个方法,对应着Command的两个
不同的子类,但是呢,执行Receiver的方法的不是Receiver,而是通过Invoker去执行的,这就是体现了解耦合的思想。
感觉抽象程度很高的哈。
下面看具体代码:
Command类:
package com.blog.anla.Command;/** * 用来声明执行操作的接口 * @author U-ANLA * */public abstract class Command {protected Receiver receiver;public Command(Receiver receiver){this.receiver = receiver;}abstract public void execute();}
ConcreteCommandA类:
package com.blog.anla.Command;/** * 将一个接受者对象绑定与一个动作, * 调用接受者相应的操作,以实现Execute * @author U-ANLA * */public class ConcreteCommandA extends Command{public ConcreteCommandA(Receiver receiver) {super(receiver);}@Overridepublic void execute() {receiver.ActionA();}}
ConcreteCommandB类:
package com.blog.anla.Command;public class ConcreteCommandB extends Command{public ConcreteCommandB(Receiver receiver) {super(receiver);}@Overridepublic void execute() {receiver.ActionB();}}
Receiver类:
package com.blog.anla.Command;/** * 知道如何实施和执行一个请求相关的操作 * 任何类都可能作为一个接受者。 * @author U-ANLA * */public class Receiver {public void ActionA(){System.out.println("我是Action A");}public void ActionB(){System.out.println("我是Action B");}}
Invoker类:
package com.blog.anla.Command;import java.util.ArrayList;import java.util.List;/** * 就像个外包装的服务员,负责执行命令。 * @author U-ANLA * */public class Invoker {private List<Command> commands = new ArrayList<Command>();public void addCommand(Command command) {this.commands.add(command);}public void executeCommand(){for(int i = 0;i < commands.size();i++){commands.get(i).execute();}}public void cancelCommand(Command command){commands.remove(command);}}
有不对的地方还请指出哈。
赠人玫瑰手留余香(oo)
阅读全文
0 0
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- leetcode485
- 树形动态规划 hdu1502 poj2342 Anniversary party
- cocos2dx学习笔记-给精灵类添加事件
- c语言实现静态顺序表
- Python3 输入和输出
- 命令模式
- Codeforces 题目合集+分类+蒟蒻的代码 【Updating...】【206 in total】
- JS 中关于this 执行环境的问题_part2
- 【python2.7初学日记】最初学习和编写的几个简单代码
- MySQL在单表上创建视图
- 《应用拆分与平台搭建最佳实践》- 拆分中两个核心问题
- 硬件技术
- VS2010 项目属性的默认包含路径的两种设置方法
- Matlab基本数据结构