设计模式:命令模式
- 命令模式简介
- 简介:是一种数据驱动的设计模式,根据传入的命令调用不同的执行者。
- 意图:将一个请求封装成一个对象,从而使您可以用不同的请求对客户参数化
- 主要解决:面对变化多样的软件场景,使用命令模式可以实现解耦
- 使用场景:认为是命令的地方都可以使用命令模式比如:模拟CMD
- 命令模式成分
- 命令接口
- 命令实现类
- 命令处理类
- 命令模式优缺点
- 优点:
- 降低系统耦合度
- 新的命令可以很容易添加到系统中去
- 缺点:
- 使用命令模式可能导致某些系统有过多的具体命令类
- 优点:
- 命令模式实现:
- 命令接口:
package com.fg.java.comnand; /** * 命令接口 */ public interface Order { public void execute(); }
- 命令实现类:
package com.fg.java.comnand; public class BuyStock implements Order { private Stock abcStock; public BuyStock(Stock abcStock) { this.abcStock = abcStock; } public void execute() { abcStock.buy(); } }
package com.fg.java.comnand; public class SellStock implements Order { private Stock abcStock; public SellStock(Stock abcStock) { this.abcStock = abcStock; } public void execute() { abcStock.sell(); } }
- 命令接口:
- 命令处理类:
package com.fg.java.comnand; import java.util.ArrayList; import java.util.List; public class Broker { private List<Order> orderList = new ArrayList<Order>(); public void takeOrder(Order order){ orderList.add(order); } public void placeOrder(){ for(Order order : orderList){ order.execute(); } orderList.clear(); } }
demo:
package com.fg.java.comnand; public class CommandDemo { public static void main(String [] args){ Stock abcStock = new Stock(); BuyStock buyStock = new BuyStock(abcStock); SellStock sellStock = new SellStock(abcStock); Broker broker = new Broker(); broker.takeOrder(buyStock); broker.takeOrder(sellStock); broker.placeOrder(); } }