【设计模式】—— 命令模式Commond
来源:互联网 发布:python ui 编辑:程序博客网 时间:2024/06/05 14:07
模式意图
将一个请求封装成一个对象,从而对这个命令执行撤销、重做等操作。
典型的Eclipse开发中,编辑器的操作就需要用到这个模式,比如Undo、Redo等等。
另外这个模式使得一个命令的触发与接收解耦,这样我们就可以演变成把感兴趣的对象接收这个命令,当命令触发时,这些对象就会执行操作。这个机制也是java事件的处理方式。
应用场景
1 命令抽象成对象
2 在不同的时刻,指定或者排队命令
3 支持 Undo或者Redo等操作
4 修改日志,当系统崩溃时,利用修改日志执行撤销
5 原语操作上构造一个高层系统(不理解)
模式结构
Invoker 命令的触发者,触发一个命令的执行。
/** * 命令的触发者,发送命令 * @author xingoo * */class Invoker{ private Commond commond; public Invoker(Commond commond) { this.commond = commond; } public void action(){ commond.excute(); }}
Receiver 命令的接受者,针对命令,执行一定的操作。
/** * 命令的接受者,负责接收命令,进行处理 * @author xingoo * */class Receiver{ public Receiver() { } public void action(){ System.out.println("Action of receiver!"); }}
Commond 命令的抽象接口
/** * 命令接口,定义命令的统一接口 * @author xingoo * */interface Commond{ public void excute();}
ConcreteCommond 具体的命令,关联一个接收者对象,当命令执行时,执行这个接收者对应的操作。
/** * 具体的命令 * @author xingoo * */class ConcreteCommond implements Commond{ private Receiver receiver; public ConcreteCommond(Receiver receiver) { this.receiver = receiver; } public void excute() { receiver.action(); } }
全部代码
1 package com.xingoo.Commond; 2 /** 3 * 命令的触发者,发送命令 4 * @author xingoo 5 * 6 */ 7 class Invoker{ 8 private Commond commond; 9 10 public Invoker(Commond commond) {11 this.commond = commond;12 }13 14 public void action(){15 commond.excute();16 }17 }18 /**19 * 命令的接受者,负责接收命令,进行处理20 * @author xingoo21 *22 */23 class Receiver{24 25 public Receiver() {26 27 }28 29 public void action(){30 System.out.println("Action of receiver!");31 }32 }33 /**34 * 命令接口,定义命令的统一接口35 * @author xingoo36 *37 */38 interface Commond{39 public void excute();40 }41 /**42 * 具体的命令43 * @author xingoo44 *45 */46 class ConcreteCommond implements Commond{47 48 private Receiver receiver;49 50 public ConcreteCommond(Receiver receiver) {51 this.receiver = receiver;52 }53 54 public void excute() {55 receiver.action();56 }57 58 }59 /**60 * 客户端调用者61 * @author xingoo62 *63 */64 public class Client {65 public static void main(String[] args) {66 Receiver receiver = new Receiver();67 Commond commond = new ConcreteCommond(receiver);68 System.out.println("Commond register in here!");69 70 try {71 Thread.sleep(3000);72 } catch (InterruptedException e) {73 // TODO Auto-generated catch block74 e.printStackTrace();75 }76 77 System.out.println("Commond excute in here!");78 Invoker invoker = new Invoker(commond);79 invoker.action();80 }81 }运行结果
Commond register in here!Commond excute in here!Action of receiver!
阅读全文
0 0
- 【设计模式】—— 命令模式Commond
- 设计模式-命令模式(Commond Pattern)
- 命令(commond)模式
- 三、命令模式Commond(行为型模式)
- 设计模式—命令模式
- 设计模式—命令模式
- 设计模式—命令模式
- 设计模式—命令模式
- 设计模式——命令设计模式
- 每日设计模式——命令模式
- 设计模式——命令模式(Commend)
- 设计模式——命令模式
- Java设计模式——命令模式
- JAVA设计模式——命令模式
- java设计模式——命令模式
- JAVA设计模式——命令模式
- 设计模式——命令模式
- 设计模式(12)——命令模式
- CodeSmith 7.01破解下载
- 红黑树
- C#中获取计算机当前日期时间等的不同格式
- PHP学习路线图
- 进销项管理专家
- 【设计模式】—— 命令模式Commond
- SpringMVC配置文件的头信息
- 基于SOAP的Webservice学习(一)
- 动态链接库(Dynamic Link Library)学习笔记
- maven项目java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
- 带符号数的编码
- 人工智能之八数码问题
- Leetcode:minimum-depth-of-binary-tree
- StringUtils.isBlank()和isEmpty()方法用法