設計模式之—單例模式


1.什么是單例模式

確保某一個類在整個項目中只有一個實例,並且自行創建實例化對象,並向整個系統提供這個實例。

2.單例模式通用類圖

1.單例模式通過將構造函數設置為私有,來限制外部實例話對象。
2.提供一個getInstanse接口返回內部創建的實例對象。

類圖如下:

3.單例模式的幾種實現方法

方法一:餓漢模式

單例模式實現方式有多種,其中比較簡單的實現方式是直接定義一個private的屬性,並直接初始化。相關實現如下:

public class SingletonPattern {

    private static final SingletonPattern singletonPattern = new SingletonPattern();

    private SingletonPattern(){

    }

    public static SingletonPattern getInstance(){
        return singletonPattern;
    }
}

這種方法被稱為餓漢模式,即不管有沒有地方需要獲取實例對象,都在類加載的時候直接實例話對象出來。此中方式類加載比較慢,但是獲取實例對象比較快。

方法二:懶漢模式

另外一種實現方式被稱為懶漢模式,即在第一次調用getInstance方法的時候才會創建實例話對象。實現方式如下:

public class SingletonPattern2 {

    private static SingletonPattern2 singletonPattern = null;

    private SingletonPattern2(){

    }

    public static SingletonPattern2 getInstance(){
        if (singletonPattern == null) {
            singletonPattern = new SingletonPattern2();
        }
        
        return singletonPattern;
    }
}

此種實現方式會有線程安全問題,即在getInstance中做了先檢查再操作,下面是對此問題的一種解決方案:

public class SingletonPattern2 {

    private static SingletonPattern2 singletonPattern = null;

    private SingletonPattern2() {

    }

    public static synchronized SingletonPattern2 getInstance() {
        if (singletonPattern == null) {
            singletonPattern = new SingletonPattern2();
        }
        
        return singletonPattern;
    }
}

此種解決方式是在getInstance方法加了同步操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM