参考:B站动力节点
命令模式
定义:将一个请求封装成一个对象,从而我们可以用不同的请求对客户进行参数化。解决了应用程序中对象的职责以及它们之间的通信方式。实现了请求调用者和行为实现者的解耦。
举例说明,封装股票的买、卖命令(请求调用者),交由经纪人(行为实现者)执行。
interface Order{
void execute();
}
// 股票类
class Stock{
private String name = 'AAA';
private int count = 10;
public void buy(){
System.out.println("买入[" + name + "]股票" + count + "个");
}
public void sell(){
System.out.println("卖出[" + name + "]股票" + count + "个");
}
}
// ------------------请求调用者封装类---------------------
class BuyOrder implements Order {
private Stock stock;
public BuyOrder(Stock stock) {
this.stock = stock;
}
@Override
public void execute(){
stock.buy();
}
}
class SellOrder implements Order {
private Stock stock;
public SellOrder(Stock stock){
this.stock = stock;
}
@Override
public void execute(){
stock.sell();
}
}
// ------------------行为实现者封装类---------------------
class Broker {
List<Order> orderList = new ArrayList<>();
public void takeOrder(Order order){
orderList.add(order);
}
public void placeOrder(Order order){
for (Order order : orderList) {
order.execute();
}
}
}
运行逻辑:输入指令给Broker
接收,Broker
依次执行指令,实现了对命令的封装,请求者和执行者的解耦。
class Test{
public static void main(String[] args) {
Stock stock = new Stock();
BuyOrder buy = new BuyOrder(stock);
SellyOrder sell = new SellyOrder(stock);
Broker broker = new Broker();
broker.takeOrder(buy);
broker.takeOrder(buy);
broker.takeOrder(sell);
broker.placeOrder();
}
}