装饰器模式用于给原有对象增加新功能的场景,

拿食物冰淇淋,香草巧克力作为例子,给冰淇淋加香草,或者加巧克力,或者加香草和巧克力。

首先定义一个食物接口:

/*** 装饰类和被装饰类共同继承的抽象类* 使装饰类和被装饰类具有一致性*/
public abstract class Food {/** 待被装饰者和装饰者具体发挥 */public abstract String getContent();/** 对外提供的统一接口 */public final void taste() {System.out.println(getContent());};
}

具体食物类,冰淇淋:

public class IceCream extends Food{private String name;public IceCream(String name) {this.name = name;}@Overridepublic String getContent() {return name;}
}

然后定义抽象装饰类:

public abstract class Flavor extends Food{protected Food food;protected Flavor(Food food) {this.food = food;}}

具体装饰类,顶部加点料,后续可以定义其他装饰类,扩展方便:

/*** 装饰类,在被装饰类的基础上添加一点新功能* 例如给传进来的 food 添加一种新的味道*/
public class TopFlavor extends Flavor{/** 独特的口味 */private String taste;/** 这里一定要传入被装饰对象 */public TopFlavor(Food food, String taste) {super(food);this.taste = taste;}/*** 在被装饰对象的基础上,加点儿料* @return*/@Overridepublic String getContent() {return food.getContent() + " taste " + taste;}
}

测试代码:

public class Test {public static void main(String[] args) {Food iceCream = new IceCream("Cool iceCream");// 给冰淇淋加点香草味Flavor flavor = new TopFlavor(iceCream,"vanilla");flavor.taste();// 在来点巧克力Flavor chocolate = new TopFlavor(flavor, "chocolate");chocolate.taste();}
}

Java 设计模式之装饰器模式相关推荐

  1. (设计模式七)java设计模式之装饰器模式

    一.简介: 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装.这种模式创建了一个装饰类 ...

  2. java设计模式之 装饰器模式

    装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构. 这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装 ...

  3. java设计模式之装饰器模式

    一.装饰器模式简介 装饰器模式可以动态给一个对象添加一些额外的职责,同时又不改变其结构.就象在墙上刷油漆.使用Decorator模式相比用生成子类方式达到功能的扩充显得更为灵活.这种模式创建了一个装饰 ...

  4. java设计模式之装饰器模式(包装器模式)

    显然设计模式往往追求开闭原则,所以往往是面向接口编程,那么万事万物就是先写接口,把需求弄出来,这里以一辆车子在陆地上跑为基础,对它进行装饰,使它可以具备更多的"功能",达到装饰的效 ...

  5. 设计模式学习----装饰器模式

    这两天本来是自在学习java collection Framework的Fail Fast底层机制,看到核心的部分时,突然意识到设计模式的问题,上大学到现在我还没有真正理解过设计模式的概念,于是用了大 ...

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

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

  7. 【设计模式】装饰器模式的使用

    问题来源 我们在进行软件系统设计的时候,有一些业务(如下图,一些通用的非功能性需求)是多个模块都需要的,是跨越模块的.把它们放到什么地方呢? 最简单的办法就是把这些通用模块的接口写好,让程序员在实现业 ...

  8. go设计模式之装饰器模式

    go设计模式之装饰器模式 再写这篇文章时,我已经看了很多其他人发表的类似文章,大概看了这么多吧. 亓斌的设计模式-装饰者模式(Go语言描述) jeanphorn的Golang设计模式之装饰模式 七八月 ...

  9. python中的装饰器、装饰器模式_python 设计模式之装饰器模式 Decorator Pattern

    #写在前面 已经有一个礼拜多没写博客了,因为沉醉在了<妙味>这部小说里,里面讲的是一个厨师苏秒的故事.现实中大部分人不会有她的天分.我喜欢她的性格:总是想着去解决问题,好像从来没有怨天尤人 ...

最新文章

  1. npm未能加载Visual C++组件,解决办法win10
  2. python注册登录系统_Python实现简单用户注册信息管理系统
  3. pycharm导入python环境是空的_PyCharm导入python项目并配置虚拟环境的教程详解
  4. mysql8和5.7区别_mysql8.0与mysql5.7安全加密小差别
  5. php serialize参数,php serialize(),unserialize()
  6. 机电传动控制第四周作业
  7. 【Gamemaker】YYC1.4编译的程序研究
  8. 神马!看电子书,会让记忆力衰退!
  9. 方格取数(多线程dp,深搜)
  10. 「算法」拓扑排序(货真价实,童叟无欺)
  11. GameEntity(四)—— Ientity
  12. 低功耗wifi可视门铃方案全球推广
  13. 我的职业生涯规划(软件工程)
  14. 弱电人要学习的网络安全基础知识
  15. 围绕开放标准改进WSO2 API Manager密钥管理体系结构
  16. 【Pytorch分布式训练】在MNIST数据集上训练一个简单CNN网络,将其改成分布式训练
  17. Hadoop源代码分析(完整图文版) part 1
  18. 可测量面积的谷歌地球卫星软…
  19. 科学家发现病毒感染细胞和染色体密切相关,提取出这些染色体的最大相似之处
  20. 百度2015春季实习生招聘附加题

热门文章

  1. 【英语学习】【WOTD】intoxicate 释义/词源/示例
  2. vonic 环境配置_Vonic 2.0 全新文档站上线
  3. Canny边缘检测算法原理及其VC实现详解(一)
  4. c++语言运算符的优先次序,C++中的运算符和运算符优先级总结
  5. mysql @符号_quot;Incorrect string value quot; mysql 乱码 my插入emoji Yii2
  6. UE3 预计算可见性
  7. Zookeeper Curator API 使用
  8. Enum,Int,String的互相转换 枚举转换
  9. java - 抽象类、接口、内部类
  10. 快速搭建论坛系统看这里,社交系统ThinkSNS助你快人一步!!!