命令模式

来源:互联网 发布:office mac 2016 编辑:程序博客网 时间:2024/05/29 02:19

命令模式的关键是把请求封装,调用者不必关心具体实现,只需要下达需要的命令即可,下面是个点餐例子,很好的诠释了命令模式:

package com.jerry.design.command;import java.util.ArrayList;import java.util.List;// 测试类public class Test1 {public static void main(String[] args) {        //服务员拿着菜单走过来Waiter w = new Waiter();//点鱼香肉丝Command c1 = new Yxrs();//服务员记下w.orderMenu(c1);//点干煸豆角Command c2 = new Gbdj();//服务员记下w.orderMenu(c2);//下单 System.out.println("点餐完毕 开始做餐:");w.orderFinish();}}interface Command{public void execute();}interface Cook{public void cooking(String name);}//一号厨师class FirstCooker implements Cook{@Overridepublic void cooking(String name) {        System.out.println("1号厨师正在做:"+name);}}//二号厨师class SecondCooker implements Cook{@Overridepublic void cooking(String name) {        System.out.println("2号厨师正在做:"+name);}}//鱼香肉丝命令class Yxrs implements Command{private Cook cooker = null;@Overridepublic void execute() {cooker.cooking("鱼香肉丝");}public void setCooker(Cook cooker) {this.cooker = cooker;}}//干煸豆角命令class Gbdj implements Command{private Cook cooker = null;@Overridepublic void execute() {cooker.cooking("干煸豆角");}public void setCooker(Cook cooker) {this.cooker = cooker;}}//水煮肉片命令class Szrp implements Command{private Cook cooker = null;@Overridepublic void execute() {cooker.cooking("水煮肉片");}public void setCooker(Cook cooker) {this.cooker = cooker;}}//菜单class Menu implements Command{private List<Command> commands = new ArrayList<Command>();@Overridepublic void execute() {for(Command c:commands){c.execute();}}public void addCommand(Command c){commands.add(c);}}//服务员class Waiter{private Menu menu = new Menu();//点菜public void orderMenu(Command c){FirstCooker firstCooker = new FirstCooker();SecondCooker secondCooker = new SecondCooker();if(c instanceof Yxrs){((Yxrs)c).setCooker(firstCooker);//1号做的鱼香肉丝比较好 这个菜由他做}if(c instanceof Gbdj){((Gbdj)c).setCooker(secondCooker);//2号做的干煸豆角比较好 这个菜由他做}if(c instanceof Szrp){((Szrp)c).setCooker(secondCooker);//2号做的水煮肉片比较好 这个菜由他做}menu.addCommand(c);}//下单public void orderFinish(){menu.execute();}}



原创粉丝点击