首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

三种单例模式对比

2012-11-03 
3种单例模式对比模式一:class Singleton2 {??private Singleton2(){?}??private static Singleton2 instan

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》的线程一章里面讲到了滴说

热点排行