android界面設計實例:android設計模式有哪些

1. 定義:

確保1個類只有1個實例化對象 ,提供一個全局訪問點

2. 優缺點

優點:客戶端使用單例模式的實例的時候,只需要調用一個單一的方法即可生成一個唯一的實例,有利於節約資源。
缺點:首先單例模式很難實現序列化,這就導致採用單例模式的類很難被持久化,當然也很難通過網絡傳輸;其次由於單例採用靜態方法,無法在繼承結構中使用。

3. android源碼中的體現:

例如,加載布局時經常要創建LayoutInflater的實例,常見的有三種方法:

Android設計模式-1-單例模式

其實前兩種最後都是調用的最後一種,是獲取系統服務經常用到的方法,這只是一個典型的單例的使用場景,其實在Android源碼中用到單例的情況還有很多。

4. 幾種實現方式

1.餓漢式:在聲明變量時就創建該實例
優點:線程安全,多線程中使用不會出現創建多個實例的情況
缺點:比較消耗計算機資源

Android設計模式-1-單例模式

2.懶漢式:使用到時才創建實例
優點:節省計算機資源,在單線程下能夠非常好的工作
缺點:在多線程下存在線程安全問題Android設計模式-1-單例模式

懶漢式

3.懶漢式+雙重校驗鎖:DCL ( Double Check Lock)
優點:既解決了」懶漢式「的多線程問題,又解決了資源浪費的現象。
缺點:在某些情況DCL會出現失效問題,《Java並發編程實踐》中提到此問題,並指出這種優化是醜陋的,不贊成使用的,而推薦使用靜態內部類實現。
DCL失效的原因:線程有可能得到一個不為null,但是構造不完全的對象。Why?造成不可靠的原因是編譯器為了提高執行效率的指令重排。只要認為在單線程下是沒問題的,它就可以進行亂序寫入,以保證不要讓cpu指令流水線中斷。Android設計模式-1-單例模式

懶漢式+雙重校驗鎖

4.通過靜態內部類實現單例
原理:一個類直到被使用時才被初始化,而類初始化的過程是非並行的,這些都有 JLS 保證
這也是我自己最常用的單例寫法Android設計模式-1-單例模式

靜態內部類實現單例

5.枚舉單例:寫法簡單,線程安全,並且保證任何情況都是單例
上面的其他實現單例方法在反序列化(提供了一個特別的鉤子函數)時會創建新的單例,解決方法是如3中實現readResolve方法返回單例對象,而枚舉單例則不存在此問題。Android設計模式-1-單例模式

枚舉單例

6.使用容器實現單例:可以管理多種類型的單例

Android設計模式-1-單例模式

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/222249.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-09 14:09
下一篇 2024-12-09 14:09

相關推薦

發表回復

登錄後才能評論