动态代理与装饰器模式的区别

这里,假设大家已经基本了解动态代理与装饰器模式。

我们知道增强一个类的功能而不改变这个类的源码,我们可以有动态代理和装饰器模式这两种办法。(本文讨论的区别只是基于增强类功能的区别)

那么我们该如何选择呢?


这里先说我得出的结论:

装饰器模式可以在不增加新的装饰类的情况下对已有的功能进行组合而得到新的功能,但得修改客户端代码才能使用新的功能。

动态代理则是增加一个新的类来实现功能,哪怕这个功能是对已有功能的组合,但可以不用修改客户端代码。


即区别:1.增不增加新类。2 是否需要更改客户端代码。


开始探究:


先考虑它们的类图,

装饰器:


动态代理:



假设这样一种场景,我们要为类Origin增加A功能,B功能和C功能。


JDK动态代理:需要生成三个Origin的Handler来分别增加A,B,C功能。

这三个代理类分别为OriginHandlerA,OriginHandlerB,OriginHandlerC


装饰器模式:也需要生成三个Origin的装饰器来增加A,B,C的功能。

这三个装饰器分别为OriginDecoratorA,OriginDecoratorB࿰

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值