java,单例泛化

时间:2011-12-12 11:40:55

标签: design-patterns singleton

假设:

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

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

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

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

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

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

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

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

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

例如,结帐Guice

答案 2 :(得分: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);