【发布时间】:2011-08-12 04:42:34
【问题描述】:
我需要一个支持实习的类,比如 Java 的 String 类。在创建类的实例时,如果具有相同参数的引用已经存在,则它应该返回一个预先存在的引用。否则它应该返回一个新的引用。这样:
Foo a = new Foo(5);
Foo b = new Foo(5);
Foo c = new Foo(6);
a == b
a != c
1) 工厂的工作是维护预先存在的对象表,还是表通常只是类本身的一个静态变量?
2) 预先存在的对象表是什么?它是每次请求实例时搜索的一组对象,还是键是对象而值是参数的 Map?
【问题讨论】:
-
你查看过
String的来源吗? -
String 似乎将本机代码用于其实习方法。
-
我很好奇:为什么你会需要一个支持实习的对象?
-
@BrunoReis 我在数据库中有一个预先存在的对象图。我的程序中有一个几乎相同的对象图,其中对象由数据库对象组成。用我自己的程序对象图重建数据库对象图,某种对象实习似乎是最简单的方法。我可能错了。
-
我们在谈论多少个“参数”?如果只有一个(或两个),加上
Map(或Map<K,Map<L,E>>)的静态工厂方法应该可以解决问题(或者为了线程安全,使用ConcurrentMap)。您是否需要考虑类加载/卸载,例如应用程序何时可以由容器动态加载/卸载?如果是这样,那么WeakHashMap和WeakReferences。如果有多个参数,那么 Pangea 对Flyweight+ComputingMap的建议(很多)更有意义。
标签: java oop design-patterns