装饰者模式

  • 前言
  • 类图
  • 代码
    • 测试代码
  • 总结

前言

设计模式系列目录
 
观察者模式(Decorator Pattern) 动态的将责任附加到对象上。想要扩展功能,装饰者提供有别于继承的另一种选择。通过组合实现。


类图

有段时间没有好好写了,现在补上(手动狗头)。

代码

大量代码预警,由于代码变多,写到文章内感觉有点拖沓。
于是提交到Github上了。
https://github.com/software-market/design-pattern(欢迎star,谢谢各位大佬。)

测试代码

public void test() {// 不要调料  随便来一杯Beverage beverage = new HouseBlend();printInfo(beverage);Beverage beverage1 = new DarkRoast();// 深度烘焙beverage1 = new Mocha(beverage1);// 摩卡beverage1 = new Mocha(beverage1);// 摩卡beverage1 = new Whip(beverage1);// 奶泡printInfo(beverage1);// 来一个套娃写法,危险动作,请勿模仿Beverage beverage2 = new Whip(new Mocha(new Soy(new HouseBlend())));printInfo(beverage2);}void printInfo(Beverage beverage) {System.out.println(beverage.getDescription() + " $" + beverage.cost());}

执行结果:

综合 $0.89
深度烘焙,摩卡,摩卡,奶泡 $1.49
综合,豆浆,摩卡,奶泡 $1.34

总结

  1. 除了继承,装饰者也可以让我们扩展行为。
  2. 装饰者模式会导致小对象变多,过度使用,会让程序变的复杂。
  3. JDK内有个IO模型使用了装饰者模式

极简设计模式 - 装饰者模式相关推荐

  1. Python设计模式-装饰器模式

    Python设计模式-装饰器模式 代码基于3.5.2,代码如下; #coding:utf-8 #装饰器模式class Beverage():name = ""price = 0.0 ...

  2. [Head First设计模式]山西面馆中的设计模式——装饰者模式

    原文:[Head First设计模式]山西面馆中的设计模式--装饰者模式 引言 在山西面馆吃鸡蛋面的时候突然想起装饰者这个模式,觉得面馆这个场景跟书中的星巴兹咖啡的场景很像,边吃边思考装饰者模式.这里 ...

  3. 设计模式——装饰者模式

    本文是阅读 Head First 设计模式--装饰者模式的总结. 这本书的教学模式很不错,个人很喜欢,由实际的案例由浅入深,循序渐进的让你明白良好的设计是多么的优雅迷人(回头看看自己的代码,WTF!) ...

  4. 设计模式装饰者模式_装饰者模式如何拯救了我的一天

    设计模式装饰者模式 在工作中,我正在处理庞大的Java代码库,该代码库是由许多不同的开发人员在15年的时间里开发的. 并不是所有的事情都由书来完成,但是同时我通常无法重构遇到的每一个奇怪的事物. 尽管 ...

  5. 23种设计模式——装饰者模式

    文章目录 23种设计模式--装饰者模式 1.装饰者模式概述 2.装饰者模式的结构 3.装饰者模式的实现 4.装饰者模式的应用场景 23种设计模式--装饰者模式 1.装饰者模式概述 背景 有些人为了早上 ...

  6. 读书笔记---Head First 设计模式--- 装饰者模式

    读书笔记-Head First 设计模式- 装饰者模式 装饰者模式(Decorator Pattern) 装饰者模式--动态地将责任附加到对象上.若要扩展功能,装饰者提供了比继承更有弹性的替代方案. ...

  7. Go 设计模式 - 装饰器模式

    装饰模式使用对象组合的方式动态改变或增加对象行为.Go语言借助于匿名组合和非入侵式接口可以很方便实现装饰模式.使用匿名组合,在装饰器中不必显式定义转调原对象方法. 设计模式 装饰器模式 装饰器模式主要 ...

  8. 10. 设计模式-装饰者模式

    文章目录 设计模式-装饰者模式 1. 案例引出装饰者模式 2. 装饰者模式 2.1 装饰者模式定义 2.2 装饰者模式原理 2.3 装饰者模式解决星巴克咖啡订单问题 2.4 代码实现 抽象类Drink ...

  9. Spring设计模式(装饰器模式)

    Spring设计模式(装饰器模式) 模式的定义: 装饰者模式定义: ​ 动态地为一个对象添加一些额外的职责,若要扩展一个对象的功能,装饰者提供了比继承更有弹性的替代方案. 模式的结构图 : 模式包含角 ...

最新文章

  1. C#生成CHM文件(汇总篇)
  2. NodeJs:用 nodejs + edge + ejs + c#,打造属于自己的代码生成器
  3. 设置 myeclipse 编码格式
  4. php js获取表单内容,jquery form表单获取内容以及绑定数据_javascript技巧
  5. idea 项目编译不成功-循环依赖的问题
  6. 提前祝大家十一中秋节快乐
  7. Coursera自动驾驶课程第3讲:Self-Driving Hardware and Software Architectures
  8. Spark精华问答 | 为什么要学Spark?
  9. 程序员面试金典——番外篇之约瑟夫问题1
  10. 【POJ2352】Stars(树状数组模版题)
  11. Chladni Figure CodeForces - 1162D (暴力,真香啊~)
  12. c语言学习视频(学c语言看谁的视频)
  13. Android 设置电话号码拦截(黑名单)
  14. Spring Data JPA 的动态查询和一对多及多对多查询
  15. 零基础学3D建模难不难?
  16. Cesium加载GLB和GLTF模型文件踩坑实录
  17. SQL25 获取员工其当前的薪水比其manager当前薪水还高的相关信息
  18. 代号斗罗显示服务器暂未开放,代号:斗罗内测版
  19. Linux Shell 基础语法 流程控制 逻辑运算 字符串操作详细解析
  20. Python解析百度地图各省市经纬度(二)

热门文章

  1. 数组定义时,大小必须为常量
  2. SSRS在服务器端的配置
  3. 浙大远程教育计算机小抄,电大计算机网考小抄【呕心沥血整理、电大考试必过】.doc...
  4. AQ--逆商(人生成败的关键)
  5. 系统无法联系dhcp服务器,无法续订ip无法联系dhcp服务器
  6. python和sql_python用sql
  7. VBA实现 Outlook 2010 自动密件抄送
  8. java接口自动化_【亲测】Java 接口自动化步骤
  9. 刚从今日头条Java研发岗面试回来,我总结的失败原因(附面试题
  10. 【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-Chapter9-安装软件