鉴于:

File f = new File("test.txt");

这样,每次我创建一个文件“text.txt”的引用,我得到一个不同的File对象。

我需要,如果文件是相同的,那么我得到相同的File对象。
(准确而且与示例一致,规范路径必须相同,但由于这只是一个示例,我不想深入了解文件标识)
使用静态getInstance可以很容易地实现它,该静态getInstance测试先前创建的File实例,存储在Collection中并返回存储的File实例(如果存在)。

这似乎是一个“更通用的单例模式”,其中singleton表示每个应用程序一个实例,而这里我们有一个实例,每个不同的标识(在本例中,每个文件路径只有一个File对象)。

问题是 ,由于单身人士已被充分记录(并且可能过度记录),这种模式是“描述”和标准化的吗?

(这正是在某些jvm实现中为整数<128而出于优化目的而不依赖的情况)。

===============>>#1 票数:5 已采纳

它似乎被称为Multiton ,或单身人士注册表。 我不认为它像sigleton一样有记录,但是,正如你所注意到的,它实际上是一个单身人士的更通用版本,并且具有相同的优点和缺点。

===============>>#2 票数:1

也许你会发现控制和依赖注入的反转对你的情况很有趣。

这篇文章是关于单身人士与DI的精彩读物。 http://misko.hevery.com/2008/10/21/dependency-injection-myth-reference-passing/

以Checkout Guice为例。

===============>>#3 票数:1

不是你真正想要的只是一个CachedReader吗?

伪::

class CachedConstructor {
  private Object[] cachedThings 
  private Object constructor

  public CachedConstructor(Object thing) {
    this.constructor = thing;
  }

  public Object getThing(string data) {
    if (loc in cachedFiles) {
      return getThingFromCache();
    }
    return putThingInCache(data);
  }
}

new CachedConstructor(File);

  ask by AgostinoX translate from so

未解决问题?本站智能推荐: