生活中在饭店吃饭,张三点了的“鱼香肉丝”,然后服务员将订单交给后厨的川菜师傅做;李四点了“木须肉”,然后服务员将订单交给后厨的鲁菜师傅做;王五点了“白切鸡”,然后服务员将订单交给后厨的粤菜师傅做……如果用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); } }
输出:
张三完成点餐。川菜大厨正在做鱼香肉丝
李四完成点餐。鲁菜大厨正在做木须肉
王五完成点餐。粤菜大厨做正在白切鸡
转载请注明:零五宝典 » 《JAVA设计模式》——命令模式