命令模式是行为性模式的一种,按名字的意思来解释这个模型就是帮助发命令,也就是实现发命令者和执行者之间的解耦。具体到实现我们需要一个发送命令的类,命令执行类以及命令类。发送的命令可以有很多种,所以命令要实现一个接口或者继承一个抽象类
public interface Command {
/**
* 命令只有一个方法就是执行
*/
public void exec();
}
命令执行类,因为不同的命令可能对应不同的执行类,所以执行类也可以定义成接口或者抽象类
public interface CommandReceiver {
public void receiver();
}
最差的情况就是一个命令类的实现类就对应一个命令执行类,写着是比较麻烦,但是扩展性高,这里暂时这样写作为演示
public class DelReceiver implements CommandReceiver {
@Override
public void receiver() {
System.out.println("删除命令");
}
}
public class DelCommand implements Command {
private DelReceiver del;
public DelCommand(DelReceiver del) {
this.del = del;
}
@Override
public void exec() {
del.receiver();
}
}
接下来要实现发送命令的类
public class Invoker {
private Command command;
public void setCommand(Command command){
this.command = command;
}
public void action(){
command.exec();
}
}
最后写一个test类
public class test {
public static void main(String[] args) {
Command com = new DelCommand(new DelReceiver());
Invoker inv = new Invoker();
inv.setCommand(com);
inv.action();
}
}
调用的时候很麻烦,但是这样下来命令模式应该是已经可以理解了。写到这里在对比一下前两篇的内容代理模式和策略模式,如果把这篇中的Invoker类作为Command类的功能扩展或者说是辅助功能,DelCommand类作为DelCommand功能扩展或者说是辅助功能,可以看做是双重代理(不同的是代理事项相同的接口),也有点是策略的两重实现(应该是更像这个),是不是有那么点!!(学习中的感觉,很可能是因为学习的不到位才有这种感觉,完全是为了自己的学习做记录)