记得之前写过一篇设计模式的文章分享,想要了解的可以看下这篇文章Java之Builder模式的设计实现。
分享这篇java命令行模式也要追溯到很久之前了,自己想要了解这个设计模式但是一直没有去写,现在看这个设计很简单了,命令行模式就形同领导交代事情,下属接收,然后去执行,leader->employee。是不是很好理解了?
为啥分享文章的原因就在于这个原因了,有的人可以用一句话点醒困惑你心中的疑惑,有的人教科书般给你说这说那,一头雾水,丝毫不知道在说什么,希望每一篇文章可以帮助到需要的人。
没有华丽的文采,还是采用易于理解的风格去写自己喜欢的内容好了,先看下示例程序。
package com.wpw.sprintbootcommand;
public interface Command {
/**
* 命令执行器
*/
void exec();
}
首先我们先定义一个命令执行器,即是一个接口,然后定义一个具体的实现类实现这个命令执行器。
package com.wpw.sprintbootcommand;
/**
* @author pc
*/
public class Commander implements Command {
private Receiver receiver;
Commander(Receiver receiver) {
this.receiver = receiver;
}
@Override
public void exec() {
receiver.receive();
}
}
为了便于解耦的实现,首先在命令执行器里面将接收器进行注入到Commander。
package com.wpw.sprintbootcommand;
import lombok.extern.slf4j.Slf4j;
/**
* @author pc
*/
@Slf4j
class Receiver {
/**
* 接收器
*/
void receive() {
System.out.println("receive invoker command to invoke");
log.debug("reporter projress");
System.out.println("目前进度已完成");
}
}
为了最简单的说明,仅仅输出了一句"receive leader command to invoke ";其实receiver接收命令行之后要继续接下来的一系列动作了。
package com.wpw.sprintbootcommand;
class Leader {
private Command command;
Leader(Command command) {
this.command = command;
}
void assign() {
command.exec();
}
}
真正安排活的人出来了,即Leader,这个也就是你的领导了,它只分配任务交给下面的人,也就是assign task 。到这里整个命令行就写完了。
下面的示例程序,运行正确,分享这篇文章也就结束了。
package com.wpw.sprintbootcommand;
/**
* @author pc
*/
public class Test {
public static void main(String[] args) {
Leader leader = new Leader(new Commander(new Receiver()));
leader.assign();
}
}
看下控制台console输出的日志信息,表示我们的流程也就是结束了。
receive invoker command to invoke
DEBUG com.wpw.sprintbootcommand.Receiver - reporter projress
目前进度已完成
Process finished with exit code 0