Java 23种设计模式之装饰者模式,使用场景及代码案例

装饰者模式

1.什么是装饰者模式?

概念:又名包装模式。动态给一个对象添加一些额外的职责。

若要扩展功能,装饰者提供了比继承更加有弹性的替代方案。

2.装饰者模式的使用场景

2.1 以动态的方式给对象添加职责

2.2 处理那些可以撤销的职责

2.3 当采用生成子类的方法进行扩充时,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长

这里举一个例子,我们常见而且周董特别爱喝的奶茶,当然奶茶有多种口味,红豆,椰香,珍珠等等。。。

如图中一样,奶茶是由一种主料和五种辅料组合搭配而成,这个它们一一搭配的关系,同样也可以两两或者三三搭配,依次下来就会有很多种搭配可能。从开发角度来说,就相当于继承,每个奶茶品种可以看成一个子类。我们都知道子类的作用,子类是对父类方法的一个增强,子类拥有比父类更为强大的方法。把这种场景放到开发中会出现一种现象,每新增加一种辅料最后都会新增一个子类,最后就形成了类爆炸?,继承虽然可以增强父类的功能但是子类会越来越多,代码会显的特别臃肿。

3.为什么要使用装饰者模式

由上图场景中总结,这里我们看到如果使用子类继承父类,那么我们要写很对子类,这么做无疑增加了程序的臃肿性,并不是很灵活,这时,装饰者模式就诞生了。

4.装饰者模式的结构

  1. 抽象组件(Component):给出一个抽象接口,以规范准备接收附件责任的对象
  2. 被修饰者(ConcreteComponent):Component的具体实现,也就是我们要装饰的具体对象(相当于上图中的奶茶)
  3. 装饰者组件(Decorator): 也可以说是装饰器,持有组件对象的实例引用,该类的职责就是为了装饰具体组件对象,定义的基类
  4. 具体装饰(ConcreteDecorator):负责给构建对象装饰附件功能

结构图结合案例


 前面理论,接下来代码实践

开发工具sts 运行环境Tomcat7.0

Drink.java

Decorator.java 

MilkTea.java

 

Gem.java

 

RedBean.java

 

TestMain.java

测试方法

 

结果

 


代码只是一个结合装饰者模式编写的一个案例,对应着看方便理解,具体实现根据自己的项目需求而定,不当之处请指出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值