命令模式简介

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


命令模式结构




开发中常见的场景

  • 数据库事务机制的底层实现
  • 命令的撤销和恢复






ICommand.java

package 设计模式.命令模式;

public interface ICommand {
/**
* 这个方法是一个返回结果为空的方法。
* 实际项目中,可以根据需求设计多个不同的方法
*/
void execute();
}

class ConcreteCommand implements ICommand {

private Receiver receiver; // 命令的真正的执行者

public ConcreteCommand(Receiver receiver) {
this.receiver = receiver;
}

@Override
public void execute() {
// 命令真正执行前或后,执行相关的处理!
receiver.action();
}

}


命令的调用者/发起者:Invoke.java

package 设计模式.命令模式;

/**
* 命令的调用者/发起者
*
* @author 陈霓清
*/
public class Invoke {
// 也可以通过容器List<Command>容纳很多命令对象,进行批处理。数据库底层的事务管理就是类似的结构
private ICommand command;

public Invoke(ICommand command) {
this.command = command;
}

// 业务方法 ,用于调用命令类的方法
public void call(){
command.execute();
}

}

真正的命令的执行者:Receiver.java

package 设计模式.命令模式;

/**
* 真正的命令的执行者
*
* @author 陈霓清
*/
public class Receiver {

public void action() {
System.out.println("真正的命令的执行者");
}
}


客户端调用:Client.java

package 设计模式.命令模式;

public class Client {

public static void main(String[] args) {
ICommand c = new ConcreteCommand(new Receiver());
Invoke i = new Invoke(c);
i.call();
}
}



回到顶部