命令模式

定义:通过将一系列的操作封装成一个命令对象,方便执行,同时也能够更好的让我们进行一些操作回滚,用来记录是否执行过该操作等问题。
场景: 
1、当一个应用程序调用者与多个目标对象之间存在调用关系时,并且目标对象之间的操作很类似的时候。
2、例如当一个目标对象内部的方法调用太复杂,或者内部的方法需要协作才能完成对象的某个特点操作时。
3、有时候调用者调用目标对象后,需要回调一些方法。
角色:
1.Invoke:调用者对象。
Receiver:接收调用者请求执行操作的目标对象。
ICommand:用于解耦目标对象与调用者之间的抽象命令对象。

使用:首先创建作为命令的接口 Order,然后创建作为请求的 Stock 类(命令对象)。实体命令类(对应一些列操作) BuyStock 和 SellStock,实现了 Order 接口,将执行实际的命令处理。创建作为调用对象的类 Broker,它接受订单并能下订单。
1.创建一个命令接口及命令接口的实体类。

public interface Order {
   void execute();
}
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();
   }
}
View Code

2.创建一个请求类。

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");
   }
}

3.创建命令调用类

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();
   }
}
一直想把之前工作、学习时记录的文档整理到博客上,一方面温故而知新,一方面和大家一起学习 -程序小白
原文地址:https://www.cnblogs.com/wang-jin-fu/p/8320931.html