单例模式
 
 
http://www.ibm.com/developerworks/cn/java/j-dcl.html
 
定义:
Ensure a class has only one instance, and provide a global point of access to it.
确保某个类只有一个实例,并提供一个全局访问点。
类图:

public class Singleton{
    private static final Singleton instance;
    private Singleton(){
    }
    public static Singleton getInstance(){    
        if(instance == null){          //1
            instance = new Singleton();//2
        }
        return instance;               //3
   }
    ...
}优点:
- 内存中只有一个对象,减少内存开支;
- 单例可避免对资源的多重占用,例如写文件动作,可避免对同一资源文件的同时写操作。
缺点:
- 单例模式一般没有接口,扩展很困难; ——单例并不是用来继承的。
 
- 不利于测试,并行开发时,若单例未完成,则不能进行测试;
- 与单一职责原则冲突,把“要单例”和业务逻辑融合在一个类中。
使用场景:
若出现多个对象就会出现“不良反应”,应该用单例,具体场景如下:
 
- 要求生成唯一序列号的环境;
- 在整个项目中需要一个共享访问点或共享数据。例如页面计数器;
- 创建一个对象需要消耗的资源过多时;
- 需要定义大量的静态常量和静态方法的环境。
 
为什么不直接用全局变量来实现单例?
有缺点:全局变量必须在程序一开始就创建好。而单例模式可以延迟初始化。
 
类加载器对单例的影响:
 
 
不同的类加载器可能会加载同一个类。
如果程序有多个类加载器,可在单例中指定某个加载器,并指定同一个加载器。
 
 
多线程的影响:
 
 
上文代码示例在多线程环境

 
                   
                   
                   
                   本文详细介绍了Java中的单例模式,包括其定义、优点、缺点、使用场景以及为什么不用全局变量实现。重点讨论了在多线程环境下的单例实现,如双重检查加锁、volatile关键字的作用以及其防止无序写入的重要性。同时提到了通过枚举实现单例的高效且安全的方法。
本文详细介绍了Java中的单例模式,包括其定义、优点、缺点、使用场景以及为什么不用全局变量实现。重点讨论了在多线程环境下的单例实现,如双重检查加锁、volatile关键字的作用以及其防止无序写入的重要性。同时提到了通过枚举实现单例的高效且安全的方法。
           最低0.47元/天 解锁文章
最低0.47元/天 解锁文章
                           
                       
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   551
					551
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            