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

java的IO结构,FileInputStream就是一个装饰者

public abstract class Drink {public String desc; // 描述private float price = 0.0f;public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}public float getPrice() {return price;}public void setPrice(float price) {this.price = price;}// 计算费用, 由子类实现public abstract float cost();
}public class Coffee extends Drink{@Overridepublic float cost() {return getPrice();}}public class Espresso extends Coffee{public Espresso(){setDesc(" 意大利咖啡 ");setPrice(6.0f);}
}public class LongBlack extends Coffee{public LongBlack(){setDesc(" LongBlack ");setPrice(5.0f);}
}public class ShortBlack extends Coffee{public ShortBlack(){setDesc(" ShortBlack ");setPrice(4.0f);}
}装饰者
public class Decorator extends Drink{private Drink obj;public Decorator(Drink obj){this.obj = obj;}@Overridepublic float cost() {return getPrice() + obj.cost();}@Overridepublic String getDesc() {return desc +" "+getPrice() +" && "+obj.getDesc();}
}public class Chocolate extends Decorator{public Chocolate(Drink obj) {super(obj);setDesc(" 巧克力 ");setPrice(3.0f);}
}public class Milk extends Decorator{public Milk(Drink obj) {super(obj);setDesc(" 牛奶 ");setPrice(2.0f);}
}public class Soy extends Decorator{public Soy(Drink obj) {super(obj);setDesc(" 豆浆 ");setPrice(1.5f);}
}public class Client {public static void main(String[] args){Drink order = new LongBlack();order = new Milk(order);System.out.println("加一分牛奶 "+order.getDesc());order = new Chocolate(order);System.out.println("加一分牛奶 加一份巧克力 "+order.getDesc());order = new Chocolate(order);System.out.println("加一分牛奶 加两份巧克力 "+order.getDesc());System.out.println(order.cost());}
}

设计模式:装饰者模式(Decorator)相关推荐

  1. 11.设计模式--装饰者模式(Decorator模式)

    1.定义 装饰者模式是一种结构型模型,是动态的给对象增加职责,对于新增功能来说要比通过子类方式更加的灵活. 想想一下现在有一块蛋糕,他本质上就是一个蛋糕,而如果在蛋糕上加上巧克力就变成了巧克力蛋糕,而 ...

  2. 设计模式-装饰者模式[Decorator]

    装饰者模式 本文地址:http://www.cnblogs.com/masque/p/3833141.html 部分资料来自网络,代码都是已运行实践,转载请在明显位置注明出处. 下面是一个咖啡添加不同 ...

  3. JAVA设计模式-装饰器模式(Decorator)

    装饰器模式(Decorator) 为了某个实现类在不修改原始类的基础上进行动态地覆盖或者增加方法 采用--------装饰器模式 实现类要保持与原有类的层级关系 装饰器模式是一种特殊的适配器模式 拿适 ...

  4. 装饰器模式(Decorator)

    一.装饰者模式的定义: 装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. 结构: 装饰器UML.png (1)抽象构件( ...

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

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

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

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

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

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

  8. c语言装饰,C/C++知识点之装饰器模式(Decorator) C++

    本文主要向大家介绍了 C/C++知识点之装饰器模式(Decorator) C++,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助.装饰器模式是比较常用的一种设计模式,Python中就 ...

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

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

最新文章

  1. 全美国的数据中心到底消耗了多少能源
  2. MySql General error:2006
  3. 皮一皮:这解释...没毛病!
  4. 【Matlab】函数输入个数不定怎么办?
  5. 计算机编程术语理解,计算机编程常用术语中英对照
  6. Scott Mitchell 的ASP.NET 2.0数据教程之三十九:: 在编辑和插入界面里添加验证控件...
  7. php中的图像下载函数,PHP实现的下载远程图片自定义函数分享
  8. CLR的程序集定位算法(转)
  9. chrome全屏隐藏状态栏_PS技巧丨18个让你相见恨晚的PS隐藏技巧!
  10. 小米澄清「手机不再支持GMS」;虾米音乐正式关停;《质量效应1》DLC 因源代码损坏而移除 | 极客头条...
  11. web浏览器_微软低头,Chrome 一统浏览器!
  12. 转一篇:如何快速的修改参考文献
  13. [转]PhotoShop小技巧
  14. 万字详解 GoF 23 种设计模式(多图、思维导图、模式对比),让你一文全面理解
  15. keil5生成bin文件和axf文件
  16. 数据库cosc2406-2407辅导week10-quiz-Transactions and Concurrency
  17. css的盒子模型与定位机制解读随记
  18. CRS-0804:PROC-26: Error while accessing the physical storage
  19. 【Hostapd support for WPA3 R3 Wi-Fi Security】
  20. 2021最新华为Android校招面试题,附答案

热门文章

  1. 一站式机器学习平台TI-ONE是什么?——云+未来峰会开发者专场回顾
  2. 二叉树的深度优先遍历和广度优先遍历
  3. JavaScript的数据访问总结
  4. 【Java4】IO重定向
  5. poj 1523 SPF (无向图 的 割点)
  6. 如何玩转跨库Join?跨数据库实例查询应用实践
  7. 在VSCode中编写Kotlin/Java
  8. 通过自己定义MVC的Controller的Json转换器解决日期序列化格式问题
  9. Android WebView 与 JS 交互
  10. jClarity发布Censum 3.0