前言
mybatis是一款优秀的持久层框架,支持sql,存储过程以及高级映射,也是一款开源框架,源码中使用了多种的设计模式,今天就来讲一个装饰者设计模式
mybatis-装饰者设计模式
在源码的cache中,应用了装饰者设计模式,通过装饰者模式,可以增强cache的功能,比如原来是LruCache,通过FifoCache装饰后,变成拥有Lru和Fifo的功能的cache
Cache接口
所有装饰者都应该继承Cache,拥有Cache的基本功能
装饰过程
通过BlockingCache和FifoCache,我们可以看出,每个装饰者都有一个构造函数,该构造函数的参数的Cache接口,也就是Cache实例便是被装饰的对象;
装饰的实现是通过重写Cache接口的方法,达到装饰者的功能,比如BlockingCache的getObject,putObject等方法,通过装饰后,变可以带上了lock和unlock的功能;FifoCache的getObject,putObject等方法通过重写后,可以限制元素长度,实现FIFO功能;
原生的Cache(PerpetualCache):
装饰者BlockingCache:
装饰者FifoCache:
示例:
public static void main(String[] args) {
PerpetualCache cache = new PerpetualCache("原生Cache");
// 在原生Cahce中,增加锁的功能
Cache blockingCache = new BlockingCache(cache);
// 在blockingCache中,再增加先进先出的功能
Cache blockingAndFifoCache = new FifoCache(blockingCache);
}
总结
大家是不是学到让原始功能的类不断增强的方法了呢
请大家多多关注微信公众号