java設計模式-- 單例模式

在好久以前,也就是在大二暑假的時候,那時候看馬士兵的視頻教程中有提到不少的設計模式。java

java的設計模式大體能夠分爲3大類,23種設計模式。web

其中,建立型模式有5種:單例模式、建造者模式、原型模式、工廠模式、抽象工廠模式。設計模式

結構型模式有7種:設配器模式、裝飾器模式、代理模式、外觀模式、享元模式、組合模式、橋接模式。緩存

行爲模式一種有11種:策略模式、模板方法模式、觀察者模式、迭代器模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、解釋器模式。安全

這23種設計模式並非相互獨立的,它們之間也有相互的聯繫。app

本篇中要講的是單例模式。wordpress

單例模式顧名思義,就是指本系統中只容許存在一個實例。它是一個比較基本的模式,咱們平常設計中常常使用到的設計模式之一,比方說咱們常常使用的線程池,緩存,對話框,打印機,日誌對象,顯卡等設備驅動,這類對象只能有一個勢力,若是製做多個勢力,就可能會致使一些問題。經過單例模式,咱們能夠方便對實例的個數進行控制從而節省一些系統開銷。在單例模式中,咱們有餓漢模式和懶漢模式。字面理解,餓漢模式就是肚子餓了,一開始就把單例建立出來了,懶漢模式就是肚子不餓,等到肚子餓時(系統調用)纔去建立。 惡漢模式是線程安全的,懶漢模式由於在調用時建立,因此是非線程安排。
在建立單例模式時,咱們通常都須要把構造方法私有化,而後再咱們的類中聲明一個靜態方法,調用這個方法獲取實例。spa

餓漢模式線程

hungrypattern 

/**
 * 餓漢模式
 * @author studyjun
 *
 */
public class HungryPattern {
     
         
    private static HungryPattern hPattern = new HungryPattern();
     
    private HungryPattern(){
         
    }
     
    public static HungryPattern getInstance(){
        return hPattern;
    }
}

懶漢模式設計

lazypattern 

/**
* 懶漢模式
* @author studyjun
*
*/
public class LazyPattern {
    private static LazyPattern lPattern = null;
     
    private LazyPattern(){
         
    }
     
    /**
     * 非線程安全
     * @return
     */
    public static LazyPattern getInstance(){
        if (lPattern==null) {
            lPattern = new LazyPattern();
        }
        return lPattern;
    }
     
     
    /**
     * 線程安全 ,效率比較差,能夠修改,請看getInstance3
     * @return
     */
    public static synchronized LazyPattern getInstance2(){
        if (lPattern==null) {
            lPattern = new LazyPattern();
        }
        return lPattern;
    }
     
    /**
     * 使用「雙重檢查枷鎖」,能夠減小getInstance()使用同步,只有在lPattern爲null時才進入線程同步
     * 這樣就不用每次都進行線程同步,畢竟單例只需建立時同步就行。
     * 線程安全
     * @return
     */
    public static synchronized LazyPattern getInstance3(){
        if (lPattern==null) {
            synchronized(LazyPattern.class){
                if (lPattern==null) {
                    lPattern = new LazyPattern();
                }
            }
        }
        return lPattern;
    }
}

單例模式先說到這裏,等有機會在多舉一些例子完善


源碼下載:SingletonSimple

相關文章
相關標籤/搜索