設計模式 命令模式
阿新 • • 發佈:2021-10-14
設計模式 命令模式
概念
命令符合下面這個場景
結構
案例
定義一個執行介面:
public interface Command {
void execute();
}
定義訂單類
@Data
public class Order {
//餐桌號碼
private int diningTable;
//用來儲存餐名以及份數
private Map<String,Integer> foodDic = new HashMap<>();
}
定義接受者 大廚類
public class SeniorChef { public void makeFood(int num,String foodName){ System.out.println(num + "份" + foodName); } }
定義命令物件 整合訂單和大廚
public class OrderCommand implements Command{ private SeniorChef receiver; private Order order; public OrderCommand(SeniorChef receiver, Order order) { this.receiver = receiver; this.order = order; } @Override public void execute() { System.out.println(order.getDiningTable() + "桌的訂單:"); Set<String> keys = order.getFoodDic().keySet(); for(String key : keys){ receiver.makeFood(order.getFoodDic().get(key),key); } System.out.println(order.getDiningTable() + "桌的飯做好了"); } }
定義釋出命令者 伺服器
public class Waiter { private ArrayList<Command> commands; public Waiter(ArrayList<Command> commands) { this.commands = commands; } public void addCommand(Command command){ commands.add(command); } //發出命令 喊訂單來了 廚師開始執行 public void orderUp(){ System.out.println("服務員:訂單來了"); for (int i = 0; i < commands.size(); i++) { Command cmd = commands.get(i); if(cmd != null){ cmd.execute(); } } } }
測試使用:
public class Client {
public static void main(String[] args) {
//建立兩個order
Order order1 = new Order();
order1.setDiningTable(1);
order1.getFoodDic().put("西紅柿炒雞蛋",1);
order1.getFoodDic().put("小杯可樂",2);
Order order2 = new Order();
order2.setDiningTable(2);
order2.getFoodDic().put("漏丸",1);
order2.getFoodDic().put("雪碧",1);
//建立接收者
SeniorChef receiver = new SeniorChef();
//將訂單和接收者(廚師)封裝成命令物件
}
}