代理设计模式和装饰器设计模式的区别

代理设计模式:

作用:为目标(原始对象)增加功能(额外功能,拓展功能)

三种经典应用场景:

        1:给原始对象增加额外功能(spring添加事务,Mybatis通过代理实现缓存功能等等)

        2:远程代理(网络通信,输出传输(RPC,Dubbo))

        3:无中生有,看不见类文件,却能进行使用(MyBatis中使用Mapper接口的实现类)

MyBatis使用代理模式实现缓存:MyBatis源码--04:MyBatis缓存实现-CSDN博客

MyBatis使用代理获得Mapper接口实现类:MyBatis源码分析01 ---- 通过代理确定Mapper接口实现类过程-CSDN博客

装饰器设计模式`:

作用:为目标拓展功能(核心功能)

经典应用场景:

        MyBatis实现缓存的过程实际上就使用了装饰器设计模式:

                MyBatis通过Cache接口实现缓存功能,我们来看看Cache接口的实现类:

实际上上面的实现方式包括俩大类:PerpetualCache为核心实现类,其它类为核心类的装饰器,用来增强核心类PerpetualCache的功能。

使用方法:

这种直接将实现类作为参数的使用方法可以看作是装饰器设计模式的一种标志.并且装饰器可以"套娃使用",如上图,"套娃"为PerpetualCache增加了日志功能和Lru换出策略.

区别总结

本质区别:

        装饰器增加核心功能,和被装饰对象做的是同一件事,为同一个目标服务.

        代理增加额外功能,和被代理对象做的是不同的事情. 另外注意远程代理和无中生有的使用场景.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值