有的时候,我们不希望在一开始的时候就把一个类写成单例模式,但是在运用的时候,我们却可以像单例一样使用他
最典型的例子就是spring,他的默认类型就是单例,spring是如何做到把不是单例的类变成单例呢?
这就用到了登记式单例
其实登记式单例并没有去改变类,他所做的就是起到一个登记的作用,如果没有登记,他就给你登记,并把生成的实例保存起来,下次你要用的时候直接给你。
IOC容器就是做的这个事,你需要就找他去拿,他就可以很方便的实现Bean的管理。
OK,我们来看看登记式单例是如何做的。
public class RegistSingleton {
//用ConcurrentHashMap来维护映射关系,这是线程安全的
public static final Map<String,Object> REGIST=new ConcurrentHashMap<String, Object>();
static {
//把RegistSingleton自己也纳入容器管理
RegistSingleton registSingleton=