命令模式:
通过订单实现服务员与厨师的完全解耦
服务员不关心订单的具体内容是什么,只需要将订单交给厨师即可
角色划分
订单:Command
服务员:Invoker
厨师:Receiver
使用命令模式可以实现工作队列,将接收到的命令放到BlockingQueue中
任务执行者从BlockingQueue中获取任务即可
package pattern.command; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ArrayBlockingQueue; //Command public interface Order { Order add(String item); void execute(); } //ConcreteCommand /** * 订单内部封装:1.点餐项目 2.厨师 * 命令对象的作用:实现服务员Invoker与厨师Receiver之间完全解耦 */ class CookOrder implements Order { List<String> items = new ArrayList<String>(); public Order add(String item) { items.add(item); return this; } //内部维护一个工作队列 ArrayBlockingQueue<List<String>> blokingQueue = new ArrayBlockingQueue<List<String>>(100); //Receiver Chief chief; public CookOrder(Chief chief) { this.chief = chief; } public void execute() { blokingQueue.add(items); chief.cook(this); } }
package pattern.command; //Invoker /** * 服务员并不关心订单上的具体内容是什么 * 只负责接收订单命令,并调用orderUp()-即execute() * * 服务员与厨师之间通过"订单对象"实现了解耦! */ public class Waitress { //Command Order order; public void setRoder(Order order) { this.order = order; } public void serve() { order.execute(); } }
package pattern.command; import java.util.List; /** * 真正执行任务的对象 */ public class Chief { //厨师接收到具体订单内容,开始cook public void cook(CookOrder cookOrder) { try { List<String> items = cookOrder.blokingQueue.take(); System.out.println("Chief cooking: " + items); Thread.sleep(1000); } catch (InterruptedException e) {} } }
package pattern.command; public class Client { public static void main(String[] args) { // Receiver Chief chief = new Chief(); // Command:命令对象封装【命令的接收者】和【具体的任务】 Order order1 = new CookOrder(chief); order1.add("coffee").add("bread"); giveOrderToWaitress(order1); // Command:命令对象封装【命令的接收者】和【具体的任务】 Order order2 = new CookOrder(chief); order2.add("tea").add("bread"); giveOrderToWaitress(order2); } private static void giveOrderToWaitress(Order order) { // Invoker:负责将命令对象传递给执行者 Waitress waitress = new Waitress(); // setCommand waitress.setRoder(order); waitress.serve(); } }
相关推荐
设计模式之命令模式,你值得拥有,帮你快速掌握命令模式的实例。
设计模式专题之(十四)命令模式---设计模式命令模式示例代码(python--c++)
iOS 设计模式 命令模式
72-Java设计模式 命令模式1
设计模式-命令模式(讲解及其实现代码)
Head First 设计模式 (六) 命令模式(Command pattern) C++实现
设计模式之命令模式 设计模式之命令模式代码 设计模式之命令模式代码
命令设计模式代码示例--用最简单的代码诠释命令设计模式
设计模式这命令模式的Java实现版本和UML设计类图
设计模式--命令模式java例子
设计模式-命令模式,这里是《Head Fist 设计模式》一书中的练习
面向对象分析与设计 设计模式之命令模式 面向对象分析与设计 设计模式之命令模式
本系统基于六种设计模式,运用到的设计模式有备忘录模式,简单工厂模式,迭代器模式,状态模式,模版方法模式,单例模式。 具体实现过程、UML类图以及实现效果详见如下项目说明地址: ... 该系统为绘图系统,该系统通过...
设计模式之命令模式详解(内附有例子,无源码),2个文件打包在一起上传
java常用设计模式-命令模式
23种设计模式之命令模式对命令模式进行了简单的介绍,并附带了例子程序,和大家分享
设计模式主要分为三大类: 1.创建型模式:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。 2.结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 4.行为型模式:...
设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式、备忘录模式 设计模式15-观察者模式、状态模式 设计模式16-策略模式、模板方法、访问者 此PPT实例便于...
目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式