Java 设计模式之装饰器模式
装饰器模式用于给原有对象增加新功能的场景,
拿食物冰淇淋,香草巧克力作为例子,给冰淇淋加香草,或者加巧克力,或者加香草和巧克力。
首先定义一个食物接口:
/*** 装饰类和被装饰类共同继承的抽象类* 使装饰类和被装饰类具有一致性*/
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 设计模式之装饰器模式相关推荐
- (设计模式七)java设计模式之装饰器模式
一.简介: 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装.这种模式创建了一个装饰类 ...
- java设计模式之 装饰器模式
装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构. 这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装 ...
- java设计模式之装饰器模式
一.装饰器模式简介 装饰器模式可以动态给一个对象添加一些额外的职责,同时又不改变其结构.就象在墙上刷油漆.使用Decorator模式相比用生成子类方式达到功能的扩充显得更为灵活.这种模式创建了一个装饰 ...
- java设计模式之装饰器模式(包装器模式)
显然设计模式往往追求开闭原则,所以往往是面向接口编程,那么万事万物就是先写接口,把需求弄出来,这里以一辆车子在陆地上跑为基础,对它进行装饰,使它可以具备更多的"功能",达到装饰的效 ...
- 设计模式学习----装饰器模式
这两天本来是自在学习java collection Framework的Fail Fast底层机制,看到核心的部分时,突然意识到设计模式的问题,上大学到现在我还没有真正理解过设计模式的概念,于是用了大 ...
- Java设计模式(装饰者模式-组合模式-外观模式-享元模式)
Java设计模式Ⅳ 1.装饰者模式 1.1 装饰者模式概述 1.2 代码理解 2.组合模式 2.1 组合模式概述 2.2 代码理解 3.外观模式 3.1 外观模式概述 3.2 代码理解 4.享元模式 ...
- 【设计模式】装饰器模式的使用
问题来源 我们在进行软件系统设计的时候,有一些业务(如下图,一些通用的非功能性需求)是多个模块都需要的,是跨越模块的.把它们放到什么地方呢? 最简单的办法就是把这些通用模块的接口写好,让程序员在实现业 ...
- go设计模式之装饰器模式
go设计模式之装饰器模式 再写这篇文章时,我已经看了很多其他人发表的类似文章,大概看了这么多吧. 亓斌的设计模式-装饰者模式(Go语言描述) jeanphorn的Golang设计模式之装饰模式 七八月 ...
- python中的装饰器、装饰器模式_python 设计模式之装饰器模式 Decorator Pattern
#写在前面 已经有一个礼拜多没写博客了,因为沉醉在了<妙味>这部小说里,里面讲的是一个厨师苏秒的故事.现实中大部分人不会有她的天分.我喜欢她的性格:总是想着去解决问题,好像从来没有怨天尤人 ...
最新文章
- npm未能加载Visual C++组件,解决办法win10
- python注册登录系统_Python实现简单用户注册信息管理系统
- pycharm导入python环境是空的_PyCharm导入python项目并配置虚拟环境的教程详解
- mysql8和5.7区别_mysql8.0与mysql5.7安全加密小差别
- php serialize参数,php serialize(),unserialize()
- 机电传动控制第四周作业
- 【Gamemaker】YYC1.4编译的程序研究
- 神马!看电子书,会让记忆力衰退!
- 方格取数(多线程dp,深搜)
- 「算法」拓扑排序(货真价实,童叟无欺)
- GameEntity(四)—— Ientity
- 低功耗wifi可视门铃方案全球推广
- 我的职业生涯规划(软件工程)
- 弱电人要学习的网络安全基础知识
- 围绕开放标准改进WSO2 API Manager密钥管理体系结构
- 【Pytorch分布式训练】在MNIST数据集上训练一个简单CNN网络,将其改成分布式训练
- Hadoop源代码分析(完整图文版) part 1
- 可测量面积的谷歌地球卫星软…
- 科学家发现病毒感染细胞和染色体密切相关,提取出这些染色体的最大相似之处
- 百度2015春季实习生招聘附加题
热门文章
- 【英语学习】【WOTD】intoxicate 释义/词源/示例
- vonic 环境配置_Vonic 2.0 全新文档站上线
- Canny边缘检测算法原理及其VC实现详解(一)
- c++语言运算符的优先次序,C++中的运算符和运算符优先级总结
- mysql @符号_quot;Incorrect string value quot; mysql 乱码 my插入emoji Yii2
- UE3 预计算可见性
- Zookeeper Curator API 使用
- Enum,Int,String的互相转换 枚举转换
- java - 抽象类、接口、内部类
- 快速搭建论坛系统看这里,社交系统ThinkSNS助你快人一步!!!