设计模式-命令模式
来源:互联网 发布:apache 安装 编辑:程序博客网 时间:2024/04/26 20:36
定义:将一个请求封装为一个对象,从而使我们可以用不同的请求对用户进行参数化。其实也是在客户请求与服务器之间加一个中间人的角色,来达到分离耦合目的的模式。在命令模式中,命令对象并不知道如何处理命令,会由相应的接收者对象来真正执行命令。命令模式的本质是:封装请求。主要就是把请求封装成命令对象,然后对此对象进行一系列的处理。命令模式的角色:(1)Command:定义命令接口,声明执行的方法。(2)ConcreteCommand:命令接口实现对象,通常持有请求接收者,并调用接收者的功能来完成命令要执行的操作。(3)Receiver:接受者,真正执行命令的对象,只要能够命令要求实现相应功能的类,都可以作为接收者。(4)Invoker:调用者,使用命令对象的入口,通常持有命令对象,这是客户端真正触发命令并要求命令执行相应操作的地方。(5)Client:创建具体的命令对象,并设置命令对象的接收者,这个客户端非传统意义上的客户端,也可称为装配者,组装命令对象与接收者。
//命令接口,声明要执行的操作 public interface Command{ //执行命令的操作 public void execute(); } //具体命令对象 public class ConcreteCommand implements Command{ //持有相应的接收者 private Receiver receiver; //命令对象自己的状态 private String state; public ConcreteCommand(Receiver receiver){ this.receiver = receiver; } @Override public void execute(){ //通常调用接收者对应的方法,让接收者来真正执行功能 receiver.action(); } } //接收者对象 public class Receiver{ //真正执行命令的方法 public void action(){} } //调用者,使用命令对象的入口 public class Invoker{ //持有命令对象 private Command command; public void setCommand(Command command){ this.command = command; } //控制命令对象执行方法 public void runCommand(){ command.execute(); } } //装配者类 public class Client{ //负责创建命令,设定他的接收者 public void assemble(){ //创建接收者 Receiver receiver = new Receiver(); Command command = new ConcreteCommand(receiver); //创建调用者,将命令对象设置进去 Invoker invoker = new Invoker(); invoker.setCommand(command); } }
命令模式的关键之处就是把请求封装成对象,也就是命令对象,并定义统一执行操作接口,这个命令对象可以被存储,转发,记录,处理,撤销等,整个命令模式都是对这个对象的操作。命令模式的使用场景:(1)需要抽象出要执行的操作,可使用命令模式。(2)需要在不同的时刻指定,排列和执行请求,可以选用命令模式。可以把请求封装成命令对象,然后实现把请求队列化。(3)支持取消操作,通过命令的管理,很容易实现命令的恢复和重做。(4)如果需要支持系统崩溃时,能把对系统的操作重新执行一遍,可以使用命令模式,记录命令日志,通过日志可将命令重新执行一遍。(5)在需要事物的系统里面,可选用命令模式,命令模式有一个别名transaction。
0 0
- 设计模式---命令模式
- 设计模式-命令模式
- 设计模式:命令模式
- 设计模式:命令模式
- 设计模式:命令模式
- 设计模式 命令模式
- 设计模式--命令模式
- 设计模式---命令模式
- 设计模式- 命令模式
- 设计模式---命令模式
- 设计模式 - 命令模式
- 【设计模式】【命令模式】
- 设计模式---命令模式
- 设计模式 - 命令模式
- 设计模式:命令模式
- 设计模式 - 命令模式
- 设计模式-命令模式
- 设计模式---命令模式
- JPA 配置persistence.xml
- 数据测试手札--------------------(1)
- DIV遮罩层的显示隐藏
- spring log4j配置
- 串口通信问题处理
- 设计模式-命令模式
- c# int数组 每个int的各个位排序 和数组排序
- 哈理工OJ 1795 发现王国之旅(最小生成树)
- lstm的数学推导
- 蓝牙连接建立
- Dagger2使用进阶
- 读取common.properties文件
- jzoj 4683. 【GDOI2017模拟8.11】矩阵 后缀数组+哈希表
- Android开源库之使用ZXing开源库实现二维码功能