单例模式

程序中只需要创建某个类的一个实例,用到单例模式。

应用场景:Runtime类、数据库连接池、日志管理(例如:log4j)

实现原理:一个类,内部定义了该类的静态变量,并且定义了获取该静态变量的静态方法;构造函数的访问权限定义为 private;

饿汉式单例模式:(类加载时被创建)

 1 public class Singleton {
 2   private static Singleton instance = new Singleton();
 3   private Singleton(){   // 访问权限 私有 是为了 防止类外通过构造函数获取该类的实例
 4   ...
 5   } 
 6   public static Singleton getInstance (){
 7       return instance;
 8   }     
 9 
10 }

懒汉式单例模式:(需要获取时才进行创建)

 

 1   public class Singleton {
 2     private static Singleton instance = null;
 3     private Singleton(){   // 访问权限 私有 是为了 防止类外通过构造函数获取该类的实例
 4      ...
 5     } 
 6     public static Singleton getInstance (){
7 if(instance == null){
8 instance = new Singleton();
9 }
10 return instance; 11 } 12 13 }

懒汉式单例模式在单线程下没什么问题,但是在多线程下会创建 多个实例。与单例模式的初衷相悖,所以有了 双检索机制的 懒汉式单例模式。

双检索机制的懒汉式单例模式:

 1 public class Singleton {
 2     private static Singleton instance = null;
 3     private Singleton(){
 4        ...;
 5     }
 6     public static Singleton getInstance(){
 7         if( instance == null ){
 8            synchronized ( Singleton.class) { // 增加同步机制
 9                if( instance == null ) {
10                    instance = new Singleton();
11                }
12            }
13         }
14     }
15 }

 

 

 

posted on 2016-03-24 15:35  ChuangZ  阅读(312)  评论(2)    收藏  举报

导航