鉴于:

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

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

6回复

Java中的单例和继承

我有一个基类,它捕获了两个类共有的一些功能。 换句话说,我可以创建一个基类,并使这两个类成为该基类的子类。 但是,对于这些子类中的每一个,可以创建的实例数为1(即,每个子类必须为单例)。 我搜寻了一下,发现对此进行了合理的辩论。 尽管有几种解决方案可用,但我不确定它们是否适合我的情况。
9回复

Java中的单例和多线程

在多线程环境中使用 Singleton 类的首选方法是什么? 假设我有 3 个线程,并且所有线程都尝试同时访问单例类的getInstance()方法 - 如果不保持同步会发生什么? 使用synchronized getInstance()方法或在getInstance()使用synchroniz
1回复

Java抽象工厂和单例[重复]

这个问题已经在这里有了答案: 在Java中实现单例模式的有效方法是什么? [已关闭] 29个答案 我想实现一个抽象工厂的例子,但是具体工厂必须作为单例。 在这里举香蕉先生的例子: http : //www.newthinktank.com/2012/09/abstract
3回复

java参数化类的单例

我无法摆脱这种纠结。 这种参数化是有缺陷的,因为您不能对非静态T进行静态引用。不过,我仍想构建一个可参数化的单例类。
4回复

在Java中使用枚举单例有什么用?

当Gang of four引入单例模式时,他们还必须解释,为什么不使用静态类字段和方法。 原因是:继承的可能性。 对于Java来说它有意义 - 我们通常不能继承类字段和方法。 后来出现了“Effective Java”一书。 我们现在知道反射的存在破坏了私有构造函数的单例类的奇点。
11回复

Java单例设计模式:问题

我最近接受了一次采访,他问我关于单例设计模式是如何实现的,我告诉他使用静态变量和静态方法我们可以实现单例设计模式。 他似乎对答案半满意,但我想知道 我们有多少种不同的方式可以在 Java 中实现单例设计模式? 单例对象的范围是什么?它在 JVM 中实际是如何工作的? 我知道我们总是会有一个单例对象
2回复

单例的Java功能接口为枚举

在查看Comparators类的源代码时,我遇到了这些代码行。 我想我明白这是做什么的。 它是一个实现Comparator接口的Singleton实例。 它使用实现Comparable接口的类的“compareTo”进行自然排序(如果我错了,请纠正我)。 然而,我不明白为什么使用枚举
4回复

单例设计模式-Java[重复]

这个问题已经在这里有了答案: 在Java中实现单例模式的有效方法是什么? [已关闭] 29个答案 下面的类是否实现单例模式? 我真的很困惑 谢谢。