java装饰着模式及应用场景_Java 23种设计模式之装饰者模式,使用场景及代码案例...

装饰者模式

1.什么是装饰者模式?

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

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

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

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

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

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

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

a8428ee21127b6141f903bff26dbe293.png

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

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

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

4.装饰者模式的结构

抽象组件(Component):给出一个抽象接口,以规范准备接收附件责任的对象

被修饰者(ConcreteComponent):Component的具体实现,也就是我们要装饰的具体对象(相当于上图中的奶茶)

装饰者组件(Decorator): 也可以说是装饰器,持有组件对象的实例引用,该类的职责就是为了装饰具体组件对象,定义的基类

具体装饰(ConcreteDecorator):负责给构建对象装饰附件功能

结构图结合案例

b7eb14fb7e53520e200cbbb72e8e7cec.png

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

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

e85991799b406de4a10d4dfd8245e626.png

Drink.java

02d59ae4f52fc4d284705f30b2acec0e.png

Decorator.java

90f0de68c4df81567606d84c0defa7ac.png

MilkTea.java

46e5a6fc1d9df4b7f40d96f51ca8d84a.png

Gem.java

367695a30d535a2e14ec1e53f34efd2c.png

RedBean.java

1fa31fd16d8836c6e6ca541336a4b7c2.png

TestMain.java

测试方法

b67f6f610104f26ceba8619a5262af75.png

结果

7f27bc378bd16f10388d3461ba9114e4.png

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

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值