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

mybatis中的SynchronizedCache源码遇到的不懂的地方?求大神帮看看
首先由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包中的源码。