[Design Pattern] Command Pattern 简单案例

Command Pattern, 即命令模式,把一个命令包裹在一个对象里面,将命令对象传递给命令的执行方,属于行为类的设计模式

下面是命令模式的一个简单案例。

Stock 代表被操作的对象。Order 定义命令的接口,BuyStock, SellStock 是具体类,实现 Order 接口。Broker 是命令的执行方。CommandPatternDemo 演示命令模式。

代码实现

Order, 命令接口

public interface Order {

    public void execute();
}

具体的命令类

public class BuyStock implements Order {

    private Stock stock;
    
    public BuyStock(Stock stock){
        this.stock = stock;
    }
    
    @Override
    public void execute() {
        stock.buy();
    }
}
public class SellStock implements Order {

    private Stock stock;
    
    public SellStock(Stock stock){
        this.stock = stock;
    }
    
    @Override
    public void execute() {
        stock.sell();
    }
}

Broker, 命令的执行者

import java.util.LinkedList;
import java.util.List;

public class Broker {
    
    private List<Order> orders = new LinkedList<>();
    
    public void takeOrder(Order order){
        orders.add(order);
    }
    
    public void placeOrders(){
        for (Order order : orders){
            order.execute();
        }
    }
}

演示命令模式

public class CommandPatternDemo {

    public static void main(){
        Stock stock = new Stock("apple", 19);
        
        Order buyStock = new BuyStock(stock);
        Order sellStock = new SellStock(stock);
                
        Broker broker = new Broker();
        broker.takeOrder(buyStock);
        broker.takeOrder(sellStock);
        
        broker.placeOrders();
    }
}

考虑扩展性

需要新增一个命令操作时,如 FreezeStock:

1. 新增一个文件,实现 FreezeStock 类,使其实现 Order 接口。

2. 在 Stock 中添加 freeze 方法

3. 在客户端中调用新增的 FreezeStock 对象,类实现命令。

即可实现新增操作的效果,无需修改命令执行方 Broker 的代码。

参考资料

Design Patterns - Command Pattern, TutorialsPoint

原文地址:https://www.cnblogs.com/TonyYPZhang/p/5515641.html