command模式

1、核心意图:
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求
排队或记录请求日志,以及支持可撤消的操作。

2、command模式构成:
• 客户角色(Client):创建一个具体命令对象,并确定其接收者
• 命令角色(Command):声明一个给所有具体命令类的抽象接口。这是一个抽象角色,通常由一个接口 或抽象类实现
• 具体命令角色(ConcreteCommand):定义一个接收者和行为之间的弱耦合,实现execute方法,负责调用接收者的相应操作
• 请求者角色(Invoker):负责调用命令对象执行请求。
• 接收者角色(Receiver):负责具体实施和执行一个请求

3、生活例子:


4、代码实现:
Client.java 例子中的”顾户“
Java代码 复制代码 收藏代码
  1. public class Client
  2. {
  3. public static void main(String[] args)
  4. {
  5. Receiver receiver = new Receiver();
  6. Command command = new ConcreteCommand(receiver);
  7. Invoker invoker = new Invoker(command);
  8. invoker.doInvokerAction();
  9. }
  10. }


Command.java 例子中的”订单“
Java代码 复制代码 收藏代码
  1. public interface Command
  2. {
  3. public void execute();
  4. }


ConcreteCommand.java 例子中的”订单“的相应操作
Java代码 复制代码 收藏代码
  1. public class ConcreteCommand implements Command
  2. {
  3. private Receiver receiver;
  4. public ConcreteCommand(Receiver receiver)
  5. {
  6. this.receiver = receiver;
  7. }
  8. @Override
  9. public void execute()
  10. {
  11. receiver.doAction();
  12. }
  13. }


Invoker.java 例子中的”服务员“
Java代码 复制代码 收藏代码
  1. public class Invoker
  2. {
  3. private Command command;
  4. public Invoker(Command command)
  5. {
  6. this.command = command;
  7. }
  8. public void doInvokerAction()
  9. {
  10. command.execute();
  11. }
  12. }


Receiver.java 例子中的”厨师“
Java代码 复制代码 收藏代码
  1. public class Receiver
  2. {
  3. public void doAction()
  4. {
  5. System.out.println("执行任务!");
  6. }
  7. }  
原文地址:https://www.cnblogs.com/bjanzhuo/p/3576061.html