Mẫu thiết kế - Mẫu lệnh

Mẫu lệnh là một mẫu thiết kế theo hướng dữ liệu và thuộc danh mục mẫu hành vi. Một yêu cầu được bao bọc dưới một đối tượng dưới dạng lệnh và được chuyển đến đối tượng invoker. Đối tượng Invoker tìm kiếm đối tượng thích hợp có thể xử lý lệnh này và chuyển lệnh đến đối tượng tương ứng thực hiện lệnh.

Thực hiện

Chúng ta đã tạo một Lệnh giao diện hoạt động như một lệnh. Chúng tôi đã tạo một lớp Stock hoạt động như một yêu cầu. Chúng ta có các lớp lệnh cụ thể BuyStockSellStock triển khai giao diện Order sẽ thực hiện xử lý lệnh thực tế. Một nhà môi giới lớp được tạo ra để hoạt động như một đối tượng invoker. Nó có thể nhận và đặt hàng.

Đối tượng Broker sử dụng mẫu lệnh để xác định đối tượng nào sẽ thực hiện lệnh nào dựa trên loại lệnh. CommandPatternDemo , lớp demo của chúng tôi, sẽ sử dụng lớp Broker để thể hiện mẫu lệnh.

Bước 1

Tạo giao diện lệnh.

Order.java

public interface Order {
   void execute();
}

Bước 2

Tạo một lớp yêu cầu.

Stock.java

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

Bước 3

Tạo các lớp cụ thể thực hiện giao diện Order .

MuaStock.java

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

Bước 4

Tạo lớp invoker lệnh.

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

Bước 5

Sử dụng lớp Broker để nhận và thực hiện các lệnh.

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

Bước 6

Xác minh kết quả đầu ra.

Stock [ Name: ABC, Quantity: 10 ] bought
Stock [ Name: ABC, Quantity: 10 ] sold