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);
}
} /** ===命令模式測試=== ===客人點餐=== 增加點心訂單 增加飲料訂單 增加點心訂單 增加飲料訂單 增加飲料訂單 增加飲料訂單 取出麵包->美乃滋塗上滿滿的麵包->丟進烤箱->灑上可以吃的裝飾->點心完成 拿出杯子->加滿冰塊->把飲料倒進杯子->飲料完成 取出麵包->美乃滋塗上滿滿的麵包->丟進烤箱->灑上可以吃的裝飾->點心完成 拿出杯子->加滿冰塊->把飲料倒進杯子->飲料完成 拿出杯子->加滿冰塊->把飲料倒進杯子->飲料完成 拿出杯子->加滿冰塊->把飲料倒進杯子->飲料完成 點心賣完了 影料賣完了 **/