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

前端之家收集整理的这篇文章主要介绍了设计模式(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.3Java源代码

接收者角色类

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.}

猜你在找的设计模式相关文章