設計模式--單例模式

什麼是設計模式

設計模式(Design pattern)是一套被反覆使用、多數人知曉的、通過分類編目的、代碼設計經驗的總結。使用設計模式是爲了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 毫無疑問,設計模式於己於他人於系統都是多贏的;設計模式使代碼編制真正工程化;設計模式是軟件工程的基石脈絡,如同大廈的結構同樣。html

設計模式分類

設計模式分爲三種類型,共23種設計模式

  • 建立型模式:單例模式、抽象工廠模式、建造者模式、工廠模式、原型模式。
  • 結構型模式:適配器模式、橋接模式、裝飾模式、組合模式、外觀模式、享元模式、代理模式。
  • 行爲型模式:模版方法模式、命令模式、迭代器模式、觀察者模式、中介者模式、備忘錄模式、解釋器模式、狀態模式、策略模式、職責鏈模式、訪問者模式。

單例模式

單例模式是最簡單的設計模式之一,保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。緩存

適用性安全

  • 當類只能有一個實例並且客戶能夠從一個衆所周知的訪問點訪問它時。
  • 當這個惟一實例應該是經過子類化可擴展的,而且客戶應該無需更改代碼就能使用一個擴展的實例時。

例如:工具

配置文件、工具類、線程池、緩存、日誌對象等學習

若是以上這些對象創造出多個實例,就會致使許多問題, 好比佔用過多資源,不一致的結果等。那麼如何保證整個應用中某個實例有且只有一個呢?這裏咱們就能夠經過 單例模式來實現了。spa

單例模式種類

常見的單例模式分爲以下兩類:線程

  • 懶漢模式(線程不安全的)
  • 餓漢模式(線程安全的)

懶漢模式

class InstanceDemo2
{
    public static void main(String[] args){
        懶漢 懶=懶漢.getInstance();
        懶漢 漢=懶漢.getInstance();
        if(懶==漢){
            System.out.println("是同一個實例");
        }else{
            System.out.println("不是同一個實例");
        }
        
    }
}


//懶漢模式
class 懶漢{
    //1,將構造方法私有化,不容許外部直接建立對象
    private 懶漢(){}
    //2,聲明類的惟一實例,使用private static 修飾
    private static 懶漢 lazy; //默認值爲null
    //定義getInstance
    public static 懶漢 getInstance(){
        if(lazy==null){
            lazy=new 懶漢();
        }
        return lazy;
    }
}

餓漢模式

class InstanceDemo
{
    public static void main(String[] args){
        餓漢 餓=餓漢.getInstance();
        餓漢 漢=餓漢.getInstance();
        if(餓==漢){
            System.out.println("是同一個實例");
        }else{
            System.out.println("不是同一個實例");
        }
    }
}

class 餓漢{
    //1.限制外界不能隨意的new對象
    private  餓漢(){}  
    //在類內部造對象,而後在將對象送出去
    //2.建立對象
    private static  final 餓漢 h=new 餓漢();
    //3.提供一個用於獲實例的方法, 使用public static修飾
    public static 餓漢 getInstance(){
        return h;
    }
}

兩種模式的區別

餓漢模式的特色是加載類是比較慢,可是運行時獲取對象的速度比較快,線程安全,懶漢模式的特色是加載類是比較快,可是運行獲取對象的速度比較慢,線程不安全設計

如以上文章或連接對你有幫助的話,別忘了在文章結尾處輕輕點擊一下 「還不錯」按鈕或到頁面右下角點擊 「贊一個」 按鈕哦。你也能夠點擊頁面右邊「分享」懸浮按鈕哦,讓更多的人閱讀這篇文章。代理

做者: Li-Cheng
因爲本人水平有限,文章在表述和代碼方面若有不妥之處,歡迎批評指正。留下你的腳印,歡迎評論哦。你也能夠關注我,一塊兒學習哦!

(^_^)若是您以爲此文對您有幫助,打個賞喝個咖啡(^_^)

相關文章
相關標籤/搜索