生活中在饭店吃饭,张三点了的“鱼香肉丝”,然后服务员将订单交给后厨的川菜师傅做;李四点了“木须肉”,然后服务员将订单交给后厨的鲁菜师傅做;王五点了“白切鸡”,然后服务员将订单交给后厨的粤菜师傅做……如果用java程序来模拟这个点餐过程就用到了所谓的“命令模式”。其定义是这样的:某个方法需要完成某一个行为(所有菜都要厨师做),但这个行为的具体实现无法确定(不同菜系对应不同厨师),必须等到执行该方法时才可以确定(顾客点餐后交给不同厨师)。具体实现代码如下:
1.菜品做法标准:
public interface Menu {
//所有的菜都要让厨师做,但具体哪个厨师做不清楚
public abstract void cooking();
}
2.鱼香肉丝做法:
public class yxrs implements Menu {
//重写方法,鱼香肉丝是川菜厨师做
@Override
public void cooking() {
System.out.println("川菜大厨正在做鱼香肉丝");
}
}
3.木须肉做法:
public class mxr implements Menu {
//重写方法,木须肉是鲁菜厨师做
@Override
public void cooking() {
System.out.println("鲁菜大厨正在做木须肉");
}
}
4.白切鸡做法:
public class bqj implements Menu {
//重写方法,白切鸡是粤菜厨师做
@Override
public void cooking() {
System.out.println("粤菜大厨做正在白切鸡");
}
}
5.定义顾客类:
public class Customer {
//顾客姓名变量
public String name;
//构造器
public Customer(String name) {
this.name = name;
}
//点餐行为
public void order(Menu menu) {
System.out.print(this.name+"完成点餐。");
menu.cooking();
}
}
6.模拟点餐:
public class Test {
public static void main(String[] args) {
//饭店菜单
Menu yxrs = new yxrs();
Menu mxr = new mxr();
Menu bqj = new bqj();
//张三点鱼香肉丝
Customer zs = new Customer("张三");
zs.order(yxrs);
//李四点木须肉
Customer ls = new Customer("李四");
ls.order(mxr);
//王五点白切鸡
Customer ww= new Customer("王五");
ww.order(bqj);
}
}
输出:
张三完成点餐。川菜大厨正在做鱼香肉丝
李四完成点餐。鲁菜大厨正在做木须肉
王五完成点餐。粤菜大厨做正在白切鸡