mybatis中的SynchronizedCache源码遇到的不懂的地方?求大神帮看看

whc748227431whc 2014-06-29 10:20:01
首先由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常量。
...全文
129 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
whc748227431whc 2014-06-30
  • 打赏
  • 举报
回复
引用 1 楼 rumlee 的回复:
这实际上用的是装饰模式的思路。 而且也并不一定会出现你所顾虑的循环递归的问题。 因为SynchronizedCache类中的Cache delegate;属性并不一定还是SynchronizedCache类的对象,也许是一个另外实现类的对象。 这种设计模式在java IO中应用非常多,你可以看看java.io包中的源码。
谢谢,有点启发,就是说构造函数传入的Cache,它可能由别的类实现,而别的类实现的getId()方法可以返回一个String的值,谢了,可以结了。
rumlee 2014-06-30
  • 打赏
  • 举报
回复
这实际上用的是装饰模式的思路。 而且也并不一定会出现你所顾虑的循环递归的问题。 因为SynchronizedCache类中的Cache delegate;属性并不一定还是SynchronizedCache类的对象,也许是一个另外实现类的对象。 这种设计模式在java IO中应用非常多,你可以看看java.io包中的源码。

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧