简介:命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。请求以命令的形式包裹在对象中,将一组行为抽象为对象,并传给调用对象,实现二者之间的松耦合,下面将用一个买卖商品相关的案例进一步深入了解。
优点: 1、降低了系统耦合度。 2、新的命令可以很容易添加到系统中去。3、调用同一方法实现不同的功能
缺点:使用命令模式可能会导致某些系统有过多的具体命令类
概要设计:我们首先创建作为命令的接口 Order,然后创建作为请求的 Stock 类。实体命令类 BuyStock 和 SellStock,实现了 Order 接口,将执行实际的命令处理。创建作为调用对象的类 Broker,它接受订单并能下订单。
Broker 对象使用命令模式,基于命令的类型确定哪个对象执行哪个命令。CommandPatternDemo,我们的演示类使用 Broker 类来演示命令模式。
代码:
步骤 1
创建一个命令接口
public interface Order {
void execute();
}
步骤 2
创建一个请求类。
public class Stock {
private String name = "戴尔笔记本";
private int quantity = 10;
public void buy(){
System.out.println("Stock [ Name: "+name+",
Quantity: " + quantity +" ] bought");
}
public void sell(){
System.out.println("Stock [ Name: "+name+",
Quantity: " + quantity +" ] sold");
}
}
步骤 3
创建实现了 Order 接口的实体类。
public class BuyStock implements Order {
private Stock abcStock;
public BuyStock(Stock abcStock){
this.abcStock = abcStock;
}
public void execute() {
abcStock.buy();
}
}
public class SellStock implements Order {
private Stock abcStock;
public SellStock(Stock abcStock){
this.abcStock = abcStock;
}
public void execute() {
abcStock.sell();
}
}
步骤 4
创建命令调用类。
public class Broker {
private List<Order> orderList = new ArrayList<Order>();
public void takeOrder(Order order){
orderList.add(order);
}
public void placeOrders(){
for (Order order : orderList) {
order.execute();
}
orderList.clear();
}
}
步骤 5
使用 Broker 类来接受并执行命令。
public class CommandPatternDemo {
public static void main(String[] args) {
Stock stock = new Stock();
BuyStock buyStock = new BuyStock(stock);
SellStock sellStock = new SellStock(stock);
Broker broker = new Broker();
broker.takeOrder(buyStock);
broker.takeOrder(sellStock);
broker.placeOrders();
}
}
结果: