Java设计模式之单例设计模式

  单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例,单例模式有以下特点:

    1、单例类只能有一个实例。 

    2、单例类必须自己自己创建自己的唯一实例。 

    3、单例类必须给所有其他对象提供这一实例。

  单例模式分为懒汉模式和饿汉模式:

    懒汉模式在程序在第一次调用实例化。是线程不安全的。但是可以通过改写方法使其安全。

    饿汉模式在加载时即开始实例化,确保在调用时已经存在了实例。是线程安全的,但是内存开销似乎有点大。

  懒汉式范例代码:

 1 public class Singleton {  
 2     //私有化默认构造器
 3     private Singleton() {}  
 4     private static Singleton single=null;  
 5     //静态工厂方法   
 6     public static Singleton getInstance() {  
 7          if (single == null) {    
 8              single = new Singleton();  
 9          }    
10         return single;  
11     }  
12 }  

  饿汉式范例代码:

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

  懒汉式线程安全改进,方法1:

 1 public class Singleton {  
 2      //私有化默认构造器
 3      private Singleton() {}  
 4      private static Singleton single=null;  
 5      //静态工厂方法(加上同步方法)   
 6      public static Singleton Synchronized getInstance() {  
 7           if (single == null) {    
 8               single = new Singleton();  
 9          }    
10         return single;  
11     }  
12  }  

  方法2:

 1 public class Singleton     
 2 {        
 3     //私有化构造器
 4     private Singleton(){}     
 5     //静态内部类
 6     private static class SingletonHoledr(){     
 7         private static final Singleton instance = new Singleton();     
 8     }     
 9    //静态工厂方法
10     public static final Singleton getInstance(){     
11         return SingletonHoledr.instance;     
12     }     
13 } 

  一般本人比较钟情于用方法2。关于单例模式还有很多未涉及到。本文是本人学习笔记,如果引用请慎重。

  还有如果哪位仁兄发现有错误的麻烦帮留个言,以便改正。

原文地址:https://www.cnblogs.com/hais/p/4700803.html