文章插圖

文章插圖
1. 定義:
確保1個類只有1個實例化對象 , 提供一個全局訪問點
2. 優缺點
優點:客戶端使用單例模式的實例的時候 , 只需要調用一個單一的方法即可生成一個唯一的實例 , 有利于節約資源 。缺點:首先單例模式很難實現序列化 , 這就導致采用單例模式的類很難被持久化 , 當然也很難通過網絡傳輸;其次由于單例采用靜態方法 , 無法在繼承結構中使用 。
3. android源碼中的體現:
例如 , 加載布局時經常要創建LayoutInflater的實例 , 常見的有三種方法:
4. 幾種實現方式
1.餓漢式:在聲明變量時就創建該實例優點:線程安全 , 多線程中使用不會出現創建多個實例的情況缺點:比較消耗計算機資源
懶漢式
3.懶漢式+雙重校驗鎖:DCL ( Double Check Lock)優點:既解決了”懶漢式“的多線程問題 , 又解決了資源浪費的現象 。缺點:在某些情況DCL會出現失效問題 , 《Java并發編程實踐》中提到此問題 , 并指出這種優化是丑陋的 , 不贊成使用的 , 而推薦使用靜態內部類實現 。DCL失效的原因:線程有可能得到一個不為null , 但是構造不完全的對象 。Why?造成不可靠的原因是編譯器為了提高執行效率的指令重排 。只要認為在單線程下是沒問題的 , 它就可以進行亂序寫入 , 以保證不要讓cpu指令流水線中斷 。
懶漢式+雙重校驗鎖
4.通過靜態內部類實現單例原理:一個類直到被使用時才被初始化 , 而類初始化的過程是非并行的 , 這些都有 JLS 保證這也是我自己最常用的單例寫法
靜態內部類實現單例
5.枚舉單例:寫法簡單,線程安全,并且保證任何情況都是單例上面的其他實現單例方法在反序列化(提供了一個特別的鉤子函數)時會創建新的單例 , 解決方法是如3中實現readResolve方法返回單例對象 , 而枚舉單例則不存在此問題 。
枚舉單例
【android開發常用的設計模式 安卓中的設計模式】6.使用容器實現單例:可以管理多種類型的單例
- QGIS二次開發 qgis3二次開發
- html開發工具哪個好 html編程軟件最好用的
- 藍橋杯嵌入式開發環境搭建 藍橋杯嵌入式開發版
- java桌面應用開發框架 java桌面應用程序框架
- 網盤軟件都有哪些 常用的網盤軟件有哪兩種
- dos編程軟件 dos系統是怎么開發的
- android 播放mp3 安卓音頻文件夾
- androidstudio實戰 androidstudio項目實例
- 中國不敢公開發現龍新聞
- 中國不敢公開發現龍怕若怒神靈
