假设:
File f = new File("test.txt");
这样,每次我创建对文件“text.txt”的引用时,我都会得到一个不同的File对象。
我需要,如果文件相同,那么我得到相同的File
对象。
(准确而且与示例一致,规范路径必须相同,但由于这只是一个示例,我不想深入了解文件标识)
使用静态getInstance可以很容易地实现它,该静态getInstance测试先前创建的File实例,存储在Collection中并返回存储的实例(如果存在)。
这似乎是一个“更通用的单例模式”,其中singleton表示每个应用程序一个实例,而这里我们有一个实例,每个不同的标识(在这个例子中,每个文件路径只有一个File对象)。
问题是,因为单身人士已被充分记录(并且可能过度记录)这种模式是“描述”还是标准化了吗?
(这正是在某些jvm实现中为整数< 128进行优化而不依赖的情况。)
答案 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);