網(wǎng)頁模板網(wǎng)站生成免費建站的網(wǎng)站有哪些
1 命令模式介紹
2 命令模式原理
3 命令模式實現(xiàn)
模擬酒店后廚的出餐流程,來對命令模式進行一個演示,命令模式角色的角色與案例中角色的對應(yīng)關(guān)系如下:
服務(wù)員: 即調(diào)用者角色,由她來發(fā)起命令.
廚師: 接收者,真正執(zhí)行命令的對象.
訂單: 命令中包含訂單
/*** 訂單類**/
public class Order {private int diningTable; //餐桌號碼private Map<String,Integer> foodMenu = new HashMap<>(); //存儲菜名和份數(shù)public int getDiningTable() {return diningTable;}public void setDiningTable(int diningTable) {this.diningTable = diningTable;}public Map<String, Integer> getFoodMenu() {return foodMenu;}public void setFoodMenu(Map<String, Integer> foodMenu) {this.foodMenu = foodMenu;}
}
/*** 廚師類 -> Receiver接收者角色**/
public class Chef {public void makeFood(int num , String foodName){System.out.println(num + "份, " + foodName);}
}
/*** 抽象命令接口**/
public interface Command {void execute(); //統(tǒng)一的執(zhí)行方法
}
/*** 具體命令**/
public class OrderCommand implements Command {//接收者對象的引用private Chef receiver;private Order order;public OrderCommand(Chef receiver, Order order) {this.receiver = receiver;this.order = order;}@Overridepublic void execute() {System.out.println(order.getDiningTable() + "桌的訂單: ");Set<String> keySet = order.getFoodMenu().keySet();for (String key : keySet) {receiver.makeFood(order.getFoodMenu().get(key),key);}try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(order.getDiningTable() + "桌的菜品已經(jīng)上齊!");}}
/*** 服務(wù)員 -> Invoker 調(diào)用者**/
public class Waiter {//可以持有多個命令對象private ArrayList<Command> commands;public Waiter() {this.commands = new ArrayList<>();}public Waiter(ArrayList<Command> commands) {this.commands = commands;}public void setCommand(Command command) {this.commands.add(command);}//發(fā)出指令public void orderUp(){System.out.println("叮咚! 服務(wù)員: 有新的訂單,請師傅開始制作......");for (Command command : commands) {if(command != null){command.execute();}}}
}
public class Client {public static void main(String[] args) {Order order1 = new Order();order1.setDiningTable(10);order1.getFoodMenu().put("鮑魚炒飯",1);order1.getFoodMenu().put("海參炒面",1);Order order2 = new Order();order2.setDiningTable(15);order2.getFoodMenu().put("回鍋肉蓋飯",1);order2.getFoodMenu().put("木須肉蓋飯",1);//創(chuàng)建接收者Chef chef = new Chef();//將訂單和接收者封裝成命令對象OrderCommand cmd1 = new OrderCommand(chef, order1);OrderCommand cmd2 = new OrderCommand(chef, order2);//創(chuàng)建調(diào)用者Waiter waiter = new Waiter();waiter.setCommand(cmd1);waiter.setCommand(cmd2);//將訂單發(fā)送給廚師 上菜waiter.orderUp();}
}
4 命令模式總結(jié)