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ể BuyStock và SellStock 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