命令模式
这种设计模式属于行为型的设计模式,他解决了方法的合理调用
命令模式和外观模式 很像都是通过一个类来进行管理
不同: 外观模式是管理类的角度 命令模式是管理方法角度 而且外观模式的模式种类很固定
命令模式的优缺点 :
优点: 解耦效果很好
缺点 : 当指令过多造成内存占用大
命令模式通过 一个Master来发起命令 -> 给命令类 -> 找接受者接受
命令类中决定了接受者如何被调用
命令类和接受者之间类似适配器模式 看似是命令类执行的命令 其实是接受者执行的命令
不让Master直接调用接受者的好处是 Maser可以将调用命令封装(这里类似外观模式) 将命令代表的一组执行者要执行的操作交给命令类去负责 这样master就不必关系具体细节
master可以下达不同的命令来执行不同的操作
以Master调用receive为例
//命令抽象类
public interface Command {
public void execute();
public void cancle();
}
//命令实现类
ublic class CommandModel1 implements Command {
//将接受者叫过来执行命令 这里只有一个接受者就直接new了
CommandRecevier commandRecevier = new CommandRecevier();
@Override
public void execute() {
System.out.println("模式一启动");
commandRecevier.doCommand1();
commandRecevier.doCommand2();
commandRecevier.doCommand3();
System.out.println("模式一执行完毕");
}
@Override
public void cancle() {
System.out.println("模式一撤销");
commandRecevier.undoCommand();
}
}
public class CommandModel2 implements Command {
CommandRecevier commandRecevier = new CommandRecevier();
//这里有点像指挥者指定流程
@Override
public void execute() {
System.out.println("模式二启动");
commandRecevier.doCommand1();
commandRecevier.doCommand3();
commandRecevier.doCommand2();
System.out.println("模式二执行完成");
}
@Override
public void cancle() {
commandRecevier.undoCommand();
}
}
//接受者来执行具体命令
//接受者可以执行的命令
public class CommandRecevier {
public void doCommand1(){
System.out.println("执行命令1");
}
public void doCommand2(){
System.out.println("执行命令2");
}
public void doCommand3(){
System.out.println("执行命令3");
}
public void undoCommand(){
System.out.println("撤销命令");
}
}
public class User {
//用户调用
public static void main(String[] args) {
CommandMaster commandMaster = new CommandMaster();
commandMaster.setDoCommand(new CommandModel1());
commandMaster.setDoCommand(new CommandModel2());
commandMaster.cancel();
commandMaster.doAllCommand();
commandMaster.cancel();
}
}