【设计模式】—— 命令模式Commond

  前言:【模式总览】——————————by xingoohtml

  模式意图

  将一个请求封装成一个对象,从而对这个命令执行撤销、重作等操做。java

  典型的Eclipse开发中,编辑器的操做就须要用到这个模式,好比Undo、Redo等等。编辑器

  另外这个模式使得一个命令的触发与接收解耦,这样咱们就能够演变成把感兴趣的对象接收这个命令,当命令触发时,这些对象就会执行操做。这个机制也是java事件的处理方式。ide

  应用场景

  1 命令抽象成对象this

  2 在不一样的时刻,指定或者排队命令spa

  3 支持 Undo或者Redo等操做日志

  4 修改日志,当系统崩溃时,利用修改日志执行撤销code

  5 原语操做上构造一个高层系统(不理解)htm

  模式结构

  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 xingoo 21  * 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 xingoo 36  * 37  */
38 interface Commond{ 39     public void excute(); 40 } 41 /** 42  * 具体的命令 43  * @author xingoo 44  * 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 xingoo 62  * 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 block
74  e.printStackTrace(); 75  } 76         
77         System.out.println("Commond excute in here!"); 78         Invoker invoker = new Invoker(commond); 79  invoker.action(); 80  } 81 }
View Code

  运行结果

Commond register in here! Commond excute in here! Action of receiver!
相关文章
相关标签/搜索