天天看點

單例模式

一. 定義:

    單例模式:確定一個類隻有一個執行個體,而且自行執行個體化并向整個系統提供這個執行個體。

    初始化時執行個體化

    構造函數設定為私有通路權限,禁止外部建立對象

    其他類對該類的通路都可以通過getinstance獲得同一個對象

二. 單例模式優缺點:

    單例模式的優點:

        -- 由于單例模式在記憶體中隻有一個執行個體,減少了開支,特别是一個對象需要頻繁地建立銷毀時性能又無法優化時;

        -- 減少性能開銷。當一個對象的産生需要比較多的資源時,如讀取配置、産生其他依賴對象時,可通過在應用啟動時直接産生一個單例對象,然後永久駐留在記憶體的方式來解決;

        -- 單例對象可以避免對資源的多重占用。(避免對同一個資源檔案的同時寫操作);

        -- 可以在系統設定全局通路點,優化和共享資源通路。

    缺點:

        -- 單例模式一般沒有接口,擴充很困難;

        -- 單例模式對測試是不利的。在并行開發環境中,如果單例模式沒有完成,是不能進行測試的,沒有接口也不能使用mock的方式虛拟一個對象;

        -- 單例模式與單一職責原則有沖突。一個類應該隻是實作一個邏輯,而不關心它是否是單例的。

三. 狀态模式的使用場景及注意事項

    1.使用場景:

        要求生成唯一序列号的環境;

        在整個項目中需要一個共享通路點或共享資料;

        建立一個對象需要消耗的資源過多,如要通路io和資料庫等資源;

        需要定義大量的靜态常量和靜态方法(如工具類)的環境。

        spring中的bean預設就是單例。這樣做spring容器可以管理這些bean的生命周期,決定這些bean的建立、銷毀等。

    2.注意事項:

        高并發情況下,注意單例模式的線程同步問題。

繼續閱讀