设计模式之命令行模式
命令行接口
/**
* 命令行接口
*
* @author caiyuanhao456 cyhyx521@gmail.com
* @date 2019/12/8 20:59
*/
public interface Command {
/**
* 执行方法
*/
void execute();
}
具体命令对象
/**
* 具体命令对象
*
* @author caiyuanhao456 cyhyx521@gmail.com
* @date 2019/12/8 21:00
*/
public class ConcreteCommand implements Command {
private Receiver receiver;
public ConcreteCommand(Receiver receiver) {
this.receiver = receiver;
}
/**
* 执行方法
*/
@Override
public void execute() {
//具体命令来调用接受者的方法,接受者才是真正的逻辑
receiver.action();
}
}
请求者对象
/**
* 请求者对象 负责调用命令对象的执行请求
*
* @author caiyuanhao456 cyhyx521@gmail.com
* @date 2019/12/8 21:01
*/
public class Invoker {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public Invoker(Command command) {
this.command = command;
}
/**
* 执行命令对象的方法
*/
public void action() {
command.execute();
}
}
接收者
/**
* 接受者,具体实施和执行一个请求,任何一个类都可以是接受者,也就是我们想真正实现的业务逻辑
*
* @author caiyuanhao456 cyhyx521@gmail.com
* @date 2019/12/8 21:06
*/
public class Receiver {
public void action(){
System.out.println("需要执行的操作");
}
}
客户端
/**
* 在java的java.lang.Runnable中用到了命令行模式,
* 客户端对象.
*
* @author caiyuanhao456 cyhyx521@gmail.com
* @date 2019/12/8 21:11
*/
public class Client {
public static void main(String[] args) {
//接受者,实现具体逻辑
Receiver receiver = new Receiver();
//将接受者放入命令对象
Command command = new ConcreteCommand(receiver);
//调用命令对象
Invoker invoker = new Invoker(command);
invoker.action();
}
}
Q.E.D.
Comments | 0 条评论