设计模式之——命令(Command)模式
命令模式定义
将一组行为抽象为对象,实现二者之间的松耦合。
命令模式的优点
- 增加或删除命令方便;
- 降低系统的耦合度。
命令模式的缺点
- 可能产生大量具体命令类。
命令模式的实现
定义一个抽象命令
/**
* @ClassName AbstractCommend
* @Description TODO
* @Author mamingcong
* @Date 2020/6/17 16:56
* @Version 1.0
*/
public abstract class AbstractCommend {
public abstract void sendCommend();
}
定义一个执行者
/**
* @ClassName Receiver
* @Description TODO
* @Author mamingcong
* @Date 2020/6/17 16:57
* @Version 1.0
*/
public class Receiver {
public void doSomething(){
System.out.println("去给我买个电脑");
}
}
定义一个具体命令
/**
* @ClassName RealCommend
* @Description TODO
* @Author mamingcong
* @Date 2020/6/17 16:59
* @Version 1.0
*/
public class RealCommend extends AbstractCommend {
private Receiver receiver;
public RealCommend(Receiver receiver) {
this.receiver = receiver;
}
@Override
public void sendCommend() {
receiver.doSomething();
}
}
定义一个调用者
/**
* @ClassName Invoker
* @Description TODO
* @Author mamingcong
* @Date 2020/6/17 17:00
* @Version 1.0
*/
public class Invoker {
private AbstractCommend abstractCommend;
public Invoker(AbstractCommend abstractCommend) {
this.abstractCommend = abstractCommend;
}
public void sendCommend() {
abstractCommend.sendCommend();
}
}
测试
/**
* @ClassName Test
* @Description TODO
* @Author mamingcong
* @Date 2020/6/17 17:02
* @Version 1.0
*/
public class Test {
public static void main(String[] args) {
Receiver receiver = new Receiver();
AbstractCommend abstractCommend = new RealCommend(receiver);
Invoker invoker = new Invoker(abstractCommend);
invoker.sendCommend();
}
}
运行结果
去给我买个电脑
命令模式的使用场景
- 系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互。
- 系统需要在不同的时间指定请求、将请求排队和执行请求。
- 系统需要将一组操作组合在一起,即支持宏命令。
- 系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作。(备忘录模式)