http://www.books.com.tw/products/0010750585
命令模式 Command
目的:將各種請求(命令Command)封裝成一個物件。
package com.ssc24.chap09.demo01; public class Barkeep implements KitchenWorker { @Override public void finishOrder() { System.out.println("拿出杯子->加滿冰塊->把飲料倒進杯子->飲料完成"); } }
package com.ssc24.chap09.demo01; public class Chef implements KitchenWorker { @Override public void finishOrder() { System.out.println("取出麵包->美乃滋塗上滿滿的麵包->丟進烤箱->灑上可以吃的裝飾->點心完成"); } }
package com.ssc24.chap09.demo01; public abstract class Order { protected KitchenWorker receiver; protected String name; public Order(KitchenWorker receiver) { this.receiver = receiver; } public void sendOrder() { receiver.finishOrder(); } public String getName() { return this.name; } }
package com.ssc24.chap09.demo01; public class SnackOrder extends Order { public SnackOrder(KitchenWorker receiver) { super(receiver); super.name = "snackOrder"; } }
package com.ssc24.chap09.demo01; import java.util.ArrayList; import java.util.List; public class Waitress { private int snackQty = 2; private int drinkQty = 4; private List<Order> orderList = new ArrayList<Order>(); public void setOrder(Order order) { if (order.name.equals("snackOrder")) { if (this.snackQty <= 0) { System.out.println("點心賣完了"); } else { System.out.println("增加點心訂單"); this.snackQty--; this.orderList.add(order); } } if (order.name.equals("drinkOrder")) { if (this.drinkQty <= 0) { System.out.println("影料賣完了"); } else { System.out.println("增加飲料訂單"); this.drinkQty--; this.orderList.add(order); } } } //end setOrder public void cancelOrder(Order order) { if (order.name.equals("snackOrder")) { this.snackQty++; System.out.println("取消一個點心"); } if (order.name.equals("drinkOrder")) { this.drinkQty++; System.out.println("取消一杯飲料"); } this.orderList.remove(order); } // end cancelOrder public void notifyBaker() { for (Order order :orderList) { order.sendOrder(); } orderList.clear(); } }
package com.ssc24.chap09.demo01; public class CoffeShopClient { public static void main(String[] args) { System.out.println("===命令模式測試==="); Chef snackChef = new Chef(); Barkeep barkeep = new Barkeep(); Order snakOrder = new SnackOrder(snackChef); Order drinkOrder = new DrinkOrder(barkeep); Waitress cuteGirl = new Waitress(); System.out.println("===客人點餐==="); cuteGirl.setOrder(snakOrder); cuteGirl.setOrder(drinkOrder); cuteGirl.setOrder(snakOrder); cuteGirl.setOrder(drinkOrder); cuteGirl.setOrder(drinkOrder); cuteGirl.setOrder(drinkOrder); cuteGirl.notifyBaker(); cuteGirl.setOrder(snakOrder); cuteGirl.setOrder(drinkOrder); } }
/** ===命令模式測試=== ===客人點餐=== 增加點心訂單 增加飲料訂單 增加點心訂單 增加飲料訂單 增加飲料訂單 增加飲料訂單 取出麵包->美乃滋塗上滿滿的麵包->丟進烤箱->灑上可以吃的裝飾->點心完成 拿出杯子->加滿冰塊->把飲料倒進杯子->飲料完成 取出麵包->美乃滋塗上滿滿的麵包->丟進烤箱->灑上可以吃的裝飾->點心完成 拿出杯子->加滿冰塊->把飲料倒進杯子->飲料完成 拿出杯子->加滿冰塊->把飲料倒進杯子->飲料完成 拿出杯子->加滿冰塊->把飲料倒進杯子->飲料完成 點心賣完了 影料賣完了 **/