mybatis中的SynchronizedCache源码碰到的不懂的地方?求大神帮看看
mybatis中的SynchronizedCache源码遇到的不懂的地方?求大神帮看看
首先由Cache接口:
接着有SynchronizedCache类实现了Cache类:
我的问题就是SynchronizedCache类中实现了getId()方法,为什么实现的是 return this.delegate.getId();能这样子的吗?这个样子启不是循环递归了,而且Id从哪里来,Cache接口中并没有定义Id常量。
------解决方案--------------------
这实际上用的是装饰模式的思路。
而且也并不一定会出现你所顾虑的循环递归的问题。
因为SynchronizedCache类中的Cache delegate;属性并不一定还是SynchronizedCache类的对象,也许是一个另外实现类的对象。
这种设计模式在java IO中应用非常多,你可以看看java.io包中的源码。
首先由Cache接口:
package org.apache.ibatis.cache;
import java.util.concurrent.locks.ReadWriteLock;
public abstract interface Cache
{
public abstract String getId();
//还有很多方法
}
接着有SynchronizedCache类实现了Cache类:
public class SynchronizedCache
implements Cache
{
private Cache delegate;
public SynchronizedCache(Cache delegate)
{
this.delegate = delegate;
}
public String getId() {
return this.delegate.getId();
}
//还实现了其他方法
}
我的问题就是SynchronizedCache类中实现了getId()方法,为什么实现的是 return this.delegate.getId();能这样子的吗?这个样子启不是循环递归了,而且Id从哪里来,Cache接口中并没有定义Id常量。
------解决方案--------------------
这实际上用的是装饰模式的思路。
而且也并不一定会出现你所顾虑的循环递归的问题。
因为SynchronizedCache类中的Cache delegate;属性并不一定还是SynchronizedCache类的对象,也许是一个另外实现类的对象。
这种设计模式在java IO中应用非常多,你可以看看java.io包中的源码。