读书人

设计方式学习笔记单例模式

发布时间: 2012-11-03 10:57:44 作者: rapoo

设计模式学习笔记——单例模式

public class Singleton {private static Singleton singleton;//创建一个静态变量来保存类的实例private Singleton(){}//将构造函数声明为私有,以防止外类访问,导致多次实例化public static Singleton getInstance(){//提供一个全局访问点,返回该类的唯一实例if(singleton==null){//检查实例是否已经存在,保证唯一性singleton=new Singleton();}return singleton;}}?

public synchronized static Singleton getInstance(){……}

public class Singleton {private static Singleton singleton=new Singleton();//提前实例化private Singleton(){}public static Singleton getInstance(){return singleton;}}

public class Singleton{ private volatile static Singleton singleton; //注意volatile private Singleton(){} public static Singleton getInstance(){ if(singleton==null){ synchronized(Singleton.class){//双重锁 if(singleton==null){ singleton=new Singleton(); } } } return singleton; } }

从网上看到的情况是,在不同的classloader或者虚拟机JVM下,可能会造成结果的不可预知,所以加了2重锁

然后查了一下volatile关键字,也是为了这个目的,声明为volatile的变量就是可能产生不可预知结果的,volatile保证变量总是从内存中拿去(好像是这样,谁能再补充下,也可能我理解不对

?

最后是单例注册表

单例注册表就是将创建的实例放入到一个注册表中(HashMap),然后每次去注册表中查找实例是否被创建,同样是为了保证唯一性,而这样一个机制,个人理解类似于一个打印机请求的情况,多个打印请求1台打印机,每次只能打印(实例化)一个

?

另外看到还有用反射机制的,没有研究。。

?

这些基本就是我对单例模式的了解,有错误的地方,希望指出

读书人网 >软件开发

热点推荐