[代码模板]-结构型-装饰-应用案例

装饰模式对象组合的特点:

  • 1、装饰类和被装饰类继承同样的父类,或者实现相同的接口

  • 2、装饰类的作用是进行功能的增强而不是提供额外的功能



Mybatis 中的装饰器



Mybaits 中基础支持层提供有缓存组件功能,而缓存组件功能的实现就是以装饰者模式实现的,如下图:

[代码模板]-结构型-装饰-应用案例

所有缓存的组件都实现自同一个接口 Cache

所有缓存组件中,最基础的组件实现就是 PerpetualCache

[代码模板]-结构型-装饰-应用案例

如上图, PerpetualCache直接通过 HashMap 容器实现的缓存功能,也是最基础不具备任何功能的缓存。

线程安全的缓存组件


基础缓存组件 PerpetualCache 无法提供线程安全功能,Mybatis 使用装饰者的模式,在此基础上实现了线程安全功能的装饰类SynchronizedCache,代码如下

[代码模板]-结构型-装饰-应用案例

代码本身不具备缓存能力,只是对具有缓存能力的类进行功能的增强。


具有 LRU 功能的缓存组件


基础缓存组件 `PerpetualCache` 无法提供 LRU 算法功能,Mybaits 使用装饰者模式,提供了 LRU 算法功能,`LruCache` 代码如下:


[代码模板]-结构型-装饰-应用案例

同样的 LruCache 本身不具备缓存能力,只是对于有缓存能力的类进行功能增强。

以此类推,需要啥功能就使用装饰者模式增加功能即可,Mybatis 还实现了具有日志打印功能的 LoggingCache,周期性清除缓存功能的 ScheduledCache

上述的缓存功能,如 LRU,线程安全,不仅仅适用于基础缓存组件 PerpetualCache ,而是适用于任何一个具有缓存能力的缓存组件,

比如:一个同时具有 LRU ,线程安全,日志打印功能的缓存组件,如下图:

同理,如果需要在追加功能,只需要在增加一个装饰类,然后在往缓存组件外层套用即可。

End

来源:花好夜猿,本文观点不代表自营销立场,网址:https://www.zyxiao.com/p/77114

发表评论

电子邮件地址不会被公开。 必填项已用*标注

侵权联系
分享本页
返回顶部