设计模式(14)-行为型模式-command模式

别名:Action或者Transaction

1.1.1      功能

                Command模式通过将请求封装到一个对象(Command)中,并将请求的接受者(Receiver)存放到具体的ConcreteCommand类中中,从而实现调用操作的对象和操作的具体实现者之间的解耦。

1.1.2      结构图与协作关系

 

备注:我认为这张图应该在client与Invoker直接也画条线(箭头指向Invoker)可能更好一点.

•  C o m m a n d

                — 声明执行操作的接口。

•  C o n c r e t e C o m m a n d ( P a s t e C om m a n d,Op e n C o m m a n d )

                — 将一个接收者对象绑定于一个动作。

                — 调用接收者相应的操作,以实现E x e c u t e。

•  C l i e n t ( A p p l i c t i o n )

                — 创建一个具体命令对象并设定它的接收者。

•  Invoker  ( M e n u I t e m )

                — 要求该命令执行这个请求。

•  R e c e i v e r ( D o c u m e n t,A p p li c a t i o n )

                — 知道如何实施与执行一个请求相关的操作。任何类都可能作为一个接收者。

协作关系:


•C l i e n t创建一个Co n c r e t e C o m m a n d对象并指定它的Re c e i v e r对象。
•  某I n v o k e r对象存储该 C o n c r e t e C o m ma n d对象。
• 该In v o k e r 通过调用Co m m a n d对象的Ex e c u t e操作来提交一个请求。若该命令是可撤消的,Co n c r e t e C o m m a n d就在执行Ex c u t e操作之前存储当前状态以用于取消该命令。
•ConcreteCommand对象对调用它的Re c e i v e r的一些操作以执行该请求。

1.1.3        Java源代码

接收者角色类

1.  public class Receiver {

2.      /**

3.       * 真正执行命令相应的操作

4.       */

5.      public void action(){

6.          System.out.println("执行操作");

7.      }

8.  }

 

 

抽象命令角色类

1.  public interface Command {

2.      /**

3.       * 执行方法

4.       */

5.      void execute();

6.  }

 

具体命令角色类

1.  public class ConcreteCommand implements Command {

2.      //持有相应的接收者对象

3.      private Receiver receiver = null;

4.      /**

5.       * 构造方法

6.       */

7.      publicConcreteCommand(Receiver receiver){

8.          this.receiver = receiver;

9.      }

10.    @Override

11.    public void execute() {

12.        //通常会转调接收者对象的相应方法,让接收者来真正执行功能

13.        receiver.action();

14.    }

15. 

16.}

 

请求者角色类

1.  public class Invoker {

2.      /**

3.       * 持有命令对象

4.       */

5.      private Command command = null;

6.      /**

7.       * 构造方法

8.       */

9.      public Invoker(Commandcommand){

10.        this.command = command;

11.    }

12.    /**

13.     * 行动方法

14.     */

15.    public void action(){

16.       

17.        command.execute();

18.    }

19.}

 

 

客户端角色类

1.  public class Client {

2.   

3.      public static void main(String[] args) {

4.          //创建接收者

5.          Receiver receiver = new Receiver();

6.          //创建命令对象,设定它的接收者

7.          Command command = newConcreteCommand(receiver);

8.          //创建请求者,把命令对象设置进去

9.          Invoker invoker = new Invoker(command);

10.        //执行方法

11.        invoker.action();

12.    }

13. 

14.}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值