一、什么是命令模式?
命令模式(Command) 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数 化;对请求排队和日志,以及支持可撤销的操作。
类型:形为型模式
顺口溜:中访策备迭 观模命状职解
二、命令模式UML
三、JAVA代码实现
package com.amosli.dp.behavior.command;
public abstract class Command {
protected Receiver invoker;
public Command(Receiver invoker) {
this.invoker = invoker;
}
public abstract void execute();
}
package com.amosli.dp.behavior.command;
public class ConcreteCommand extends Command {
public ConcreteCommand(Receiver invoker) {
super(invoker);
}
@Override
public void execute() {
invoker.action();
}
}
package com.amosli.dp.behavior.command;
import java.util.ArrayList;
import java.util.List;
public class Invoker {
private List<Command> commands = new ArrayList<Command>();
public void add(Command command){
commands.add(command);
}
public void remove(Command command){
commands.remove(command);
}
public void inform(){
for (Command command : commands) {
command.execute();
}
}
}
package com.amosli.dp.behavior.command;
public class Receiver {
public void action(){
System.out.println("执行了这个操作。");
}
}
四、使用场景
1.系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互。
2.系统需要在不同的时间指定请求、将请求排队和执行请求。
3.系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作。
4.系统需要将一组操作组合在一起,即支持宏命令。
五、优缺点
1、优点
1).降低对象之间的耦合度。
2).新的命令可以很容易地加入到系统中。
3).可以比较容易地设计一个组合命令。
4).调用同一方法实现不同的功能
2、缺点
使用命令模式可能会导致某些系统有过多的具体命令类。因为针对每一个命令都需要设计一个具体命令类,因此某些系统可能需要大量具体命令类,这将影响命令模式的使用。
六、源码地址
本系列文章源码地址,https://github.com/amosli/dp 欢迎Fork & Star !!