单例模式的几种实现方式及优缺点

参考:单例模式的几种实现方式及优缺点。

单例,就是整个程序有且仅有一个实例。

1.饿汉式

1 public class Singleton {
2     private static Singleton INSTANCE = new Singleton();
3     private Singleton(){}
4     public static Singleton getInstance(){
5         return INSTANCE;
6     }
7 }

 饿汉模式在类加载的时候就对实例进行创建。

 优点:效率高 缺点:不能延时加载(浪费资源)。

2.懒汉式

 1   public class Singleton {
 2         private static Singleton instance;
 3         private Singleton(){}
 4         public static synchronized Singleton getInstance(){
 5             if(instance == null){
 6                 instance = new Singleton();
 7             }
 8             return instance;
 9        }
10    }

 优点:延时加载  缺点:效率低。

3.双重锁模式(DCL实现单例)

 1 public class Singleton {  
 2     private volatile static Singleton singleton;  
 3     private Singleton (){}  
 4     public static Singleton getSingleton() {  
 5     if (singleton == null) {  
 6         synchronized (Singleton.class) {  
 7         if (singleton == null) {  
 8             singleton = new Singleton();  
 9         }  
10       }  
11     }  
12     return singleton;  
13   }  
14 }

优点:延时加载、效率比懒汉式高

4.内部类单例

 1 public class Singleton { 
 2     private Singleton(){
 3     }
 4       public static Singleton getInstance(){  
 5         return Inner.instance;  
 6     }  
 7     private static class Inner {  
 8         private static final Singleton instance = new Singleton();  
 9     }  
10 } 

优点:延时加载、效率高

5.枚举单例

 1 public enum Singleton  {
 2     INSTANCE 
 3  
 4     //doSomething 该实例支持的行为
 5       
 6     //可以省略此方法,通过Singleton.INSTANCE进行操作
 7     public static Singleton get Instance() {
 8         return Singleton.INSTANCE;
 9     }
10 }

 优点:效率高、可以天然的防止反射和反序列化调用  缺点:不能延时加载

 

posted @ 2019-08-12 23:39  遇见神龙  阅读(331)  评论(0编辑  收藏  举报