如果字段相同,java共享对象的单个实例
我熟悉静态变量和单例,但我没有看到关于这方面的任何信息:
public class MyImmutableClass {
private final String string;
public static final MyImmutableClass getInstance(String s) {
if( a MyImmutableClass already exists with that string as its field)
return (that instance);
else
return a new instance;
}
...
}
MyImmutableClass的副本不可能存在。这有意义吗?如果有,您将如何实现这一点强>
# 1 楼答案
例如,您需要保留一个包含可能重复使用的对象的集合。主要的复杂性是,如果这样做很幼稚,就会阻止垃圾收集
考虑使用弱哈希映射,以便可以自动删除引用。
在您给定的情况下,您需要将字符串映射到对象
# 2 楼答案
我想你要找的是Static Factory模式,而不是单例模式。在Java类中有很多这样的例子。例如,如果调用方法Integer.valueOf(myString);,它可能会执行类似的操作。如果反复传入“1”,则每次都可能返回相同的整数对象
# 3 楼答案
像这样的东西应该适合你
# 4 楼答案
这被称为flyweight pattern
最简单的实现是: