星巴克咖啡订单项目

星巴克咖啡订单项目(咖啡馆):

1) 咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡)

2) 调料:Milk、Soy(豆浆)、Chocolate

3) 要求在扩展新的咖啡种类时,具有良好的扩展性、改动方便、维护方便

4) 使用OO的来计算不同种类咖啡的费用: 客户可以点单品咖啡,也可以单品咖啡+调料组合。

方案1-解决星巴克咖啡订单项目

方案1-较差的方案

更多Java –大数据 – 前端 – UI/UE - Android - 人工智能资料下载,可访问百度:尚硅谷官网(www.atguigu.com)

方案1-解决星巴克咖啡订单问题分析

1) Drink 是一个抽象类,表示饮料

2) des就是对咖啡的描述, 比如咖啡的名字

3) cost() 方法就是计算费用,Drink 类中做成一个抽象方法.

4) Decaf 就是单品咖啡, 继承Drink, 并实现cost

5) Espress && Milk 就是单品咖啡+调料, 这个组合很多

6) 问题:这样设计,会有很多类,当我们增加一个单品咖啡,或者一个新的调料,类的数量就会倍增,就会出现类爆炸

方案2-解决星巴克咖啡订单

方案2-解决星巴克咖啡订单(好点)

前面分析到方案1因为咖啡单品+调料组合会造成类的倍增,因此可以做改进,将调料内置到Drink类,这样就不会造成类数量过多。从而提高项目的维护性(如图)

说明: milk,soy,chocolate 可以设计为Boolean,表示是否要添加相应的调料.

方案2-解决星巴克咖啡订单问题分析

方案2-的问题分析

1) 方案2可以控制类的数量,不至于造成很多的类

2) 在增加或者删除调料种类时,代码的维护量很大

3) 考虑到用户可以添加多份 调料时,可以将hasMilk 返回一个对应int

4) 考虑使用 装饰者 模式

更多Java –大数据 – 前端 – UI/UE - Android - 人工智能资料下载,可访问百度:尚硅谷官网(www.atguigu.com)

装饰者模式

定义

1) 装饰者模式:动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性,装饰者模式也体现了开闭原则(ocp)_java培训

2) 这里提到的动态的将新功能附加到对象和ocp原则,在后面的应用实例上会以代码的形式体现,请同学们注意体会。

原理

1) 装饰者模式就像打包一个快递

  • 主体:比如:陶瓷、衣服 (Component) // 被装饰者
  • 包装:比如:报纸填充、塑料泡沫、纸板、木板(Decorator)

2) Component

主体:比如类似前面的Drink

3) ConcreteComponent和Decorator

ConcreteComponent:具体的主体,比如前面的各个单品咖啡

Decorator: 装饰者,比如各调料.

4) 在如图的Component与ConcreteComponent之间,如果ConcreteComponent类很多,还可以设计一个缓冲层,将共有的部分提取出来,抽象层一个类。

装饰者模式解决星巴克咖啡订单

用装饰者模式设计的方案

说明

1) Drink 类就是前面说的抽象类, Component

2) ShortBlack 就单品咖啡

3) Decorator 是一个装饰类,含有一个被装饰的对象(Drink obj)

4) Decorator 的cost 方法 进行一个费用的叠加计算,递归的计算价格_java视频

装饰者模式下的订单:2份巧克力+一份牛奶的LongBlack

说明

1) Milk包含了LongBlack

2) 一份Chocolate包含了(Milk+LongBlack)

3) 一份Chocolate包含了(Chocolate+Milk+LongBlack)

4) 这样不管是什么形式的单品咖啡+调料组合,通过递归方式可以方便的组合和维护。

装饰者模式咖啡订单项目应用实例

咖啡订单项目包结构

装饰者模式在JDK应用的源码分析

Java的IO结构,FilterInputStream就是一个装饰者

java培训 | Java设计模式之装饰者设计模式相关推荐

  1. 西安Java培训 | java设计模式之工厂设计模式

    简单工厂模式 看一个具体的需求 看一个披萨的项目:要便于披萨种类的扩展,要便于维护 1) 披萨的种类很多(比如 GreekPizz.CheesePizz 等) 2) 披萨的制作有 prepare,ba ...

  2. 北京Java培训 | java设计模式之原型模式

    克隆羊问题 现在有一只羊tom,姓名为: tom, 年龄为:1,颜色为:白色,请编写程序创建和tom羊 属性完全相同的10只羊. 传统方式解决克隆羊问题 传统的方式的优缺点 1) 优点是比较好理解,简 ...

  3. 初学Java常用设计模式之——装饰器模式

    声明:转载请附上原文链接 提示:标题序号从8开始,是照应不同设计模式笔记发布的顺序而定的,比如,上一篇文章 初学Java常用设计模式之--桥接模式和组合模式 序号从7开始. 8. 装饰器设计模式(重点 ...

  4. 结构设计模式 - 装饰器设计模式

    结构设计模式 - 装饰设计模式 装饰器设计模式用于在运行时修改对象的功能.同时,同一类的其他实例不会受此影响,因此单个对象将获得已修改的行为.装饰器设计模式是结构设计模式之一(如Adapter Pat ...

  5. java基本数据类型线程,西安莲湖区java培训哪里好(Java基本数据类型)

    西安莲湖区java培训哪里好,是否对它不太理解,那么西安Java培训会竭尽一切带你了解Java基本数据类型,Java的数据类型,java安全性,java多线程性. Java基本数据类型 Java数据类 ...

  6. 装饰者设计模式(结构型设计模式)

    一.装饰者设计模式简介 装饰器设计模式(Decorator Pattern) 也叫包装设计模式,属于结构型模式,它是作为现有的类的⼀个包装,允许向⼀个现有的对象添加新的功能, 同时⼜不改变其结构给对象 ...

  7. 深圳php和java,深圳java技术培训学习(Java和PHP区别)

    深圳java技术培训学习,深圳Java培训已经越来越普及了,通过Java和PHP区别,Java语言的分布性,Java语言的稳健性我们可以了解的更清楚些. Java和PHP区别 Java和PHP都是编程 ...

  8. Java设计模式(装饰者模式-组合模式-外观模式-享元模式)

    Java设计模式Ⅳ 1.装饰者模式 1.1 装饰者模式概述 1.2 代码理解 2.组合模式 2.1 组合模式概述 2.2 代码理解 3.外观模式 3.1 外观模式概述 3.2 代码理解 4.享元模式 ...

  9. java设计模式之装饰模式_Java中的装饰器设计模式

    java设计模式之装饰模式 装饰器设计模式允许在运行时将附加职责或行为动态附加到对象. 它是一种结构模式,利用聚合来组合这些行为. 在本教程中,我们将学习实现装饰器模式. UML图: 让我们从装饰器模 ...

最新文章

  1. R获取股票数据并进行进行可视化分析
  2. 算法与数据结构(python):递归
  3. where 1=1和 0=1 的作用
  4. Unity使用独立配置文件的方法
  5. 微信小程序循环不同列表实现动态点击隐藏
  6. 什么是通信卫星有效载荷(payload)
  7. UART/I2C/SPI/1-wire四大通信接口的神解释
  8. android 水平进度条 自定义颜色,android 水平进度条的颜色设置
  9. JavaWeb -- Struts1 多文件上传与下载 DownloadAction, DispatchAction
  10. java整型转换为数组_基于java中byte数组与int类型的转换(两种方法)
  11. 软件工程第一次测试——学生管理系统设计
  12. Linux 网络配置 修改DNS配置文件/etc/resolv.conf后,重启网络,DNS配置丢失
  13. MFC 单文档、多文档和对话框
  14. NVivo的节点矩阵
  15. Windows网络编程之Socket高级编程简介
  16. python画立体温度分布图_Origin绘制3D立体温度分布图的方法
  17. ActivityManager解析及使用
  18. t-SNE原理及代码
  19. 基于Cocos2d-x游戏引擎实战开发炸弹超人
  20. 区分QA和QC, Verification和Validation

热门文章

  1. jp@gc - PerfMon Metrics Collector:服务器性能监测控件
  2. speedoffice(Excel)表格中文字如何修方向
  3. Educational Codeforces Round 132 (Rated for Div. 2) C,D+AC自动机
  4. java遍历多层map_Java遍历Map对象的四种方式
  5. 计算机动画_3dmax的使用(六)
  6. 如何恢复被删短信_苹果手机已删除的短信怎么恢复?分享几种简单的恢复方法...
  7. 工业用微型计算机 ppt,工业用微型计算机1章.ppt
  8. java登录代码带验证码实现_两种方法实现带验证码的用户登录
  9. 怎样简洁明了地说清楚产品需求?
  10. 罗技键盘+android风格,罗技推新款便携无线键盘 手感类似传统键盘