原文链接
译者 smallclover
但愿对你们有所帮助。谢谢!(●'◡'●)java
命令模式是一种数据驱动的设计模式,属于行为型模式这一类。命令模式会将一个请求包装成一个对象并以命令的方式传递给调用者对象。调用者对象会寻找合适的而且可以处理该命令的对象,而后把该命令传递给相应的对象处理。设计模式
咱们建立了一个Order接口,该接口表明一组命令。紧接着建立一个Stock类表明请求。建立具体的命令类 BuyStock和SellStock 实现Order接口,它们将会做为具体的命令被处理。 Broker 表明调用者,它能得到而且发出命令。
Broker对象将经过命令模式来识别哪一种对象该执行哪一种命令。CommandPatternDemo,咱们的demo类,将使用Broker类来演示命令模式。this
建立命令接口。spa
Order.java设计
public interface Order { void execute(); }
建立一个请求类code
Stock.javahtm
public class Stock { private String name = "ABC"; 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"); } }
建立具体类实现Order接口对象
BuyStock.javablog
public class BuyStock implements Order { private Stock abcStock; public BuyStock(Stock abcStock){ this.abcStock = abcStock; } public void execute() { abcStock.buy(); } }
SellStock.java接口
public class SellStock implements Order { private Stock abcStock; public SellStock(Stock abcStock){ this.abcStock = abcStock; } public void execute() { abcStock.sell(); } }
建立命令调用者类
Broker.java
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 placeOrders(){ for (Order order : orderList) { order.execute(); } orderList.clear(); } }
使用Broker类得到而且执行命令
CommandPatternDemo.java
public class CommandPatternDemo { public static void main(String[] args) { Stock abcStock = new Stock(); BuyStock buyStockOrder = new BuyStock(abcStock); SellStock sellStockOrder = new SellStock(abcStock); Broker broker = new Broker(); broker.takeOrder(buyStockOrder); broker.takeOrder(sellStockOrder); broker.placeOrders(); } }
校验输出。
Stock [ Name: ABC, Quantity: 10 ] bought Stock [ Name: ABC, Quantity: 10 ] sold