这几天看书,发现了一个用Enum实现singleton的例子,据作者称,此种方法是实现singleton最好的。
但是作者给出的例子比较笼统,网上也没有很好的例子。。
那位大哥比较明白的给个完整的例子呗?
谢了!!
实际上就是一个线程安全的对象容器.
你可以不用 createObject(Key key) 方法, 你可以用addItem(Key key, Object object) 将对象从外部传进来再保存起来. 以后每次get 都是使用key来查找这个object对象.
[code="html"] 三. 用注册器机制来创建 Singleton 首先用集合中的Hashtable 和Enumeration来实现addItem(Object key, Object value),getItem(Object key), ,removeItem(Object key)等方法实现一个管理器,将key和value一一关联起来,客户程序员创建实例前首先用addItem方法进行注册,再用getItem方法获取实例.Hashtable中的key是唯一的,从而保证创建的实例是唯一的,具体实现限于篇幅不再细说,在Prototype模型的应用一文中我将会给出一个实现注册器的代码.用注册器机制来创建 Singleton模式的好处是易于管理,可以同时控制多个不同类型的Singleton 实例.
[/code]
你说的是上面这段话吗?
[code="java"]public class Factory {
private static final Hashtable buffers = new Hashtable();
public static Object getItem(Key key) {
Object value = buffers.get(key);
if (value != null) {
return value;
} else {
synchronized (Factory.class) {
value = createObject(key);
buffers.put(key, value);
return value;
}
}
}
private static Object createObject(Key key) {
return new Object();
}
}
enum Key {
A, B
}
[/code]