[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