SingleTon单例模式总结篇

在Java设计模式中,单例模式相对来说算是比较简单的一种构建模式。适用的场景在于:对于定义的一个类,在整个应用程序执行期间只有唯一的一个实例对象。

一,懒汉式:

其特点是延迟加载,即当需要用到此单一实例的时候,才去初始化此单一实例。

 1 public class SingleTon {
 2 
 3     // 静态实例变量
 4     private static SingleTon instance;
 5 
 6     // 私有化构造函数
 7     private SingleTon() {
 8 
 9     }
10 
11     // 静态public方法,向整个应用提供单例获取方式
12     public static SingleTon getInstance() {
13         if (instance == null) {
14             instance = new SingleTon();
15         }
16         return instance;
17     }
18 
19 }

懒汉式线程安全

 1 public class SingleTon {
 2 
 3     // 静态实例变量加上volatile
 4     private static volatile SingleTon instance;
 5 
 6     // 私有化构造函数
 7     private SingleTon() {
 8 
 9     }
10 
11     // 双重检查锁
12     public static SingleTon getInstance() {
13         if (instance == null) {
14             synchronized(Singleton.class){
15                 if(singleton == null){
16                     instance = new SingleTon();
17                 }
18             }
19         }
20         return instance;
21     }
22 
23 }

二,饿汉式:

饿汉式的特点是应用中尚未需要用到此单一实例的时候即先实例化。

 1 public class SingleTon {
 2 
 3     // 静态实例变量,直接初始化
 4     private static SingleTon instance = new SingleTon();
 5 
 6     // 私有化构造函数
 7     private SingleTon() {
 8 
 9     }
10 
11     // 静态public方法,向整个应用提供单例获取方式
12     public static SingleTon getInstance() {
13         return instance;
14     }
15 
16 }

静态内部类单例模式

 1 public class SingleTon {
 2 
 3     // 利用静态内部类特性实现外部类的单例
 4     private static class SingleTonken{
 5         private static SingleTon singleTon = new SingleTon();
 6     }
 7 
 8     // 私有化构造函数
 9     private SingleTon() {
10 
11     }
12 
13     public static SingleTon getInstance() {
14         return SingleTonken.singleTon;
15     }
16 
17 }

静态代码块单例模式

 1 public class SingleToken {       
 2     private static SingleToken singleTon;
 3         //私有化构造函数
 4     private SingleToken(){}
 5         //静态代码块
 6     static{
 7         singleTon = new SingleToken();
 8     }
 9     //获取实例化构造函数
10     public static SingleToken getInstatce(){
11         return singleTon;
12     }
13     
14 }

枚举单例模式

1 public enum EnumSingleTon {
2     INSTANCE;
3     public static EnumSingleTon getInstance(){
4         return INSTANCE;
5     }
6 }
原文地址:https://www.cnblogs.com/suruozhong/p/6109561.html