設計模式(一)_單例模式

養碼青年發表於2018-06-05

計劃6月份學習設計模式,一共23種設計模式,先6月份學1/4吧,學習6篇,今天就以最簡單的單例模式進行學習

概念:

  java中單例模式是一種常見的設計模式,這裡主要介紹兩種:懶漢式單例、餓漢式單例。

單例模式有以下特點:

  1、單例類只能有一個例項。
  2、單例類必須自己建立自己的唯一例項。
  3、單例類必須給所有其他物件提供這一例項。
  

  單例模式確保某個類只有一個例項,而且自行例項化並向整個系統提供這個例項。在計算機系統中,執行緒池、快取、日誌物件、對話方塊、印表機、顯示卡的驅動程式物件常被設計成單例。這些應用都或多或少具有資源管理器的功能。每臺計算機可以有若干個印表機,但只能有一個Printer Spooler,以避免兩個列印作業同時輸出到印表機中。每臺計算機可以有若干通訊埠,系統應當集中管理這些通訊埠,以避免一個通訊埠同時被兩個請求同時呼叫。總之,選擇單例模式就是為了避免不一致狀態,避免政出多頭。

餓漢模式

package com.zhb;


/**
 * 
* <p>Title: Singleton</p>  
* <p>Description:單例模式之餓漢模式 </p>  
* @author zhb  
* @date 2018年6月5日
 */
public class Singleton {
    
    //建構函式私有化
    private Singleton(){
        
    }
    
    private static Singleton instance = new Singleton();
    
    public static Singleton getInstance(){
        return instance;
    }

}

測試

    public static void main(String[] args) {
        Singleton s1 = Singleton.getInstance();
        
        Singleton s2 = Singleton.getInstance();
        
        if(s1 == s2){
            System.out.println("s1 和 s2 是一個例項");
        }else{
            System.out.println("s1 和 s2 不是一個例項");
        }
    }
//輸出結果為:s1 和 s2 是一個例項

懶漢模式

package com.zhb;


/**
 * 
* <p>Title: Singleton2</p>  
* <p>Description:懶漢模式 </p>  
* @author zhb  
* @date 2018年6月5日
 */
public class Singleton2 {
    
    //建構函式私有化
    private Singleton2(){
        
    }
    
    private static Singleton2 instance ;
    
    public static Singleton2 getInstance(){
        if(instance == null){
            instance = new Singleton2();
        }
        
        return instance;
    }

}

測試

    
    public static void main(String[] args) {
        
        Singleton2 s3 = Singleton2.getInstance();
        
        Singleton2 s4 = Singleton2.getInstance();
        
        if(s3 == s4){
            System.out.println("s3 和 s4 是一個例項");
        }else{
            System.out.println("s3 和 s4 不是一個例項");
        }
    }

// 輸出結果:s3 和 s4 是一個例項

兩種模式對比

  • 餓漢模式的特點是:載入類時比較慢,但執行時獲取物件速度快,執行緒安全;
  • 懶漢模式的特點是:載入類時比較快,但執行時獲取物件速度慢,執行緒不安全;

學習不是要麼0分,要麼100分的。80分是收穫;60分是收穫;20分也是收穫。有收穫最重要。但是因為著眼於自己的不完美,最終放棄了,那就是徹底的0分了。


相關文章