将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。
这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。
结构:
Clinet 客户端:下发命令的类,持有Command 命令类。
大哥说:我渴了。
Command 命令类:管理命令的类,持有Receiver 接收者。
大哥的小甜心:大哥要喝水,现在是冬天,要准备热水,我从商店拿水过来,然后让人捂一捂,热了再给大哥喝。
Receiver 接收者:执行命令的类。
商店:提供水。
接收者:具体执行命令。
public class Receiver { public void action(){ System.out.println(this.getClass().getName()+"开始执行任务"); } }
命令(接口):
public interface Command { void execute(); }
命令类:通过持有接收者的应用,可以调用接收者执行命令,在命令执行前后可以对命令进行处理。
class ConcreteCommand implements Command{ private Receiver receiver;//真正的执行者 public ConcreteCommand(Receiver receiver) { this.receiver = receiver; } @Override public void execute() { //在此次可以进行设计 receiver.action(); } }
客户端:发起命令,持有命令类,通过命令类下发命令。
public class Invoke { private Command command;//持有命令 public Invoke(Command command) { this.command = command; } public void call(){ command.execute(); } }
测试:
public class Client { public static void main(String[] args) { //命令管理对象,确定执行命令者 Command command = new ConcreteCommand(new Receiver()); //发布命令者,使用命令管理对象 Invoke i = new Invoke(command); //下发命令 i.call(); } }
运行结果:
标签:void,模式,命令,command,Receiver,Command,public From: https://www.cnblogs.com/lurenjia-bky/p/16927907.html