设计者模式之GOF23命令模式

命令模式Command

将一个请求封装为一个对象,从而使我们可用不同的请求对客户参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。也称之为:动作Action模式,事务transaction模式

在命令发出,命令执行前后可以进行相关操作也具有更高的扩展性,包括多个执行者,多个命令的情况

结构:

-Command抽象命令类

-ConcreteCommand具体命令类(持有Receiver类)

-Invoker调用者/请求者(持有Command类,并不直接和执行者交互)

-Receiver接收者/执行者

-客户端

开发中常见的场景:

-Struts2中,action的整个调用过程中就有命令模式

-数据库事务机制的底层实现

-命令的撤销和恢复

例子:下达命令,执行的过程

/**
 * 命令真正的执行者
 * @author 小帆敲代码
 *
 */
public class Receive {
  public void action() {
   System.out.println("Receive.action()");
  }
}

public interface Command {
  void execute();//执行
}
class ConcreteCommand implements Command{
  
 private Receive receive;//可以是容器,一个命令多个执行者
 
 public ConcreteCommand(Receive receive) {
  super();
  this.receive = receive;
 }
 @Override
 public void execute() {
  receive.action();
 }
}

/**
 * 命令的发起者
 * @author 小帆敲代码
 *
 */
public class Invoke {
  private Command command;//可以是容器持有多个命令
  public Invoke(Command command) {
   super();
   this.command = command;
  }
  public void call() {
   command.execute();
  }
}

public class Client {
public static void main(String[] args) {
 Command c=new ConcreteCommand(new Receive());
 Invoke i=new Invoke(c);
 i.call();
}
}

猜你喜欢

转载自www.cnblogs.com/code-fun/p/11362647.html
今日推荐