场景描述
贝勒爷喜欢吃京酱肉丝,跟店小二点名厨子小孙给他做一道绝美的鱼香肉丝,再配两个小菜;店小二告诉厨子小孙,这是贝勒爷的命令,必须得伺候好。
命令模式:将⼀个请求封装成⼀个对象,从⽽让你使⽤不同的请求把客户端 参数化,对请求排队或者记录请求⽇志,可以提供命令的撤销和恢复功能。
命令模式的关键在于引入了抽象命令类,请求发送者针对抽象命令类编程,只有实现了抽象命令类的具体命令才与请求接收者相关联。
类图关系
-
Receiver接受者⻆⾊:该⻆⾊就是⼲活的⻆⾊,命令传递到这⾥是应该被执⾏的
-
Command命令⻆⾊:需要执⾏的所有命令都在这⾥声明
-
Invoker调⽤者⻆⾊:接收到命令,并执⾏命令
代码示例
interface Commend {
void execute();
}
interface Receiver {
void action();
}
class ChiefReceiver implements Receiver {
@Override
public void action() {
System.out.println("coking");
}
}
class OrderCommend implements Commend {
private Receiver receiver;
public OrderCommend(Receiver receiver) {
this.receiver = receiver;
}
@Override
public void execute() {
receiver.action();
}
}
class Invoker {
List<Commend> commends = new ArrayList<>();
public void add(Commend commend) {
commends.add(commend);
}
public void invoke() {
for (Commend commend : commends) {
commend.execute();
}
}
}
public class Client {
public static void main(String[] args) {
ChiefReceiver receiver = new ChiefReceiver();
Invoker invoker = new Invoker();
OrderCommend commend1 = new OrderCommend(receiver);
OrderCommend commend2 = new OrderCommend(receiver);
invoker.add(commend1);
invoker.add(commend2);
invoker.invoke();
}
}
使用场景
-
系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互。
-
系统需要在不同的时间指定请求、将请求排队和执行请求。
-
系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作。
-
系统需要将一组操作组合在一起,即支持宏命令。
- 本文链接: https://www.sunce.wang/archives/she-ji-mo-shi-zhi-ke-hu-zhi-shang-de-ming-ling-mo-shi
- 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!