命令模式
来源:互联网 发布: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();}}
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 需要统计的数据
- vi/vim基本使用方法
- 详解Objective-C可变参数函数定义
- sql2008日志收缩
- svn的branch/tag
- 命令模式
- 异步加载图片的模块,图片的软引用
- java学习笔记-String,StringBuffer,StringBuilder浅析
- Android init 启动过程分析
- Ajax跨域访问
- 位移运算符
- What is the format of a git “blob”?
- 图学PowerBuilder----创建窗口
- Python类的基础入门知识