读书人

三种单例模式对比

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

3种单例模式对比

模式一:

class Singleton2 {
?
?private Singleton2(){
?}
?
?private static Singleton2 instance;

?public static Singleton2 getInstance() {
??if(instance==null){
???instance=new Singleton2();
??}
??return instance;
?}

}
不用说,大家也知道,这种在单线程程序中是没什么问题的,但多线程程序中,则可能会创建出2个或多个对象.

模式二:

public class Singleton {
?
?private Singleton(){
??
?}
?private static Singleton instance =new Singleton();
?
?public static Singleton getInstance(){
??return instance;
?}

}
这种很显然没有前者的问题,也是值得推崇的方式.

模式三:

public class Singleton {

?private static class SingletonHolder {
??static Singleton instance = new Singleton();
?}

?public static Singleton getInstance() {
??return SingletonHolder.instance;
?}

}
这又是一种单例实现方式,但不太明白和模式二对比,那个更好一点???显然模式三多创建了一个对象.??疑问中

1 楼 dennis_zane 2007-04-26 模式三是为了解决多线程下实现延迟初始化的singleton模式 2 楼 dovecat 2007-04-26 2楼正解!
在模式2中,不管我们是不是调用getInstance()都会存在一个实例在内存中,而在模式3中,只有我们调用了getInstance(),才会创建唯一的实例到内存中.并且也解决了模式1中多线程的问题.解决的方式是利用了Classloader的特性. 3 楼 Eastsun 2007-04-27 《Effective Java》上有滴说~ 4 楼 dovecat 2007-04-27 Eastsun 写道《Effective Java》上有滴说~恩,只展现了模式1和2 5 楼 Eastsun 2007-04-27 模式3中的lazy initialization方法在《Effective JAVA》的线程一章里面讲到了滴说

读书人网 >软件架构设计

热点推荐