单件模式(单利模式)

2018-01-22  本文已影响4人  阳光的技术小栈

单件模式确保一个类只有一个实例,并提供一个全局访问点。

单线程

public class Singleton {
     private static Singleton uniqueInstance;
     private Singleton () {}
     public static Singleton getInstance() {
         if (uniqueInstance == null) {
              uniqueInstance = new Singleton();
         }
         return uniqueInstance;
     }
}

多线程同步

可以解决多线程访问,但同步getInstance方法会造成额外的负担,频繁调用可能会使程序执行效率下降100倍。

public class Singleton {
     private static Singleton uniqueInstance;
     private Singleton () {}
     public static synchronized Singleton getInstance() {
         if (uniqueInstance == null) {
              uniqueInstance = new Singleton();
         }
         return uniqueInstance;
     }
}

急切单件

如果应用程序总是创建并使用单件实例,或者在创建和运行时方面的负担不太繁重时,可使用急切单件模式。

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

双重检查枷锁单件

利用双重检查枷锁,首先检查是否实例已经创建了,如果不存在,就进入同步区块。进入区块后,再检查一次,如果仍没有创建,才会创建实例。

public class Singleton {
     private volatile static Singleton uniqueInstance;
     private Singleton () {}
     public static Singleton getInstance() {
         if (uniqueInstance == null) {
              synchronized (Singleton.class) {
                   if (uniqueInstance == null) {
                       uniqueInstance = new Singleton();
                   }
              }
         }
         return uniqueInstance;
     }
}
上一篇下一篇

猜你喜欢

热点阅读