Android之設計模式一 單例模式

2021-08-19 21:41:05 字數 1880 閱讀 9759

最近寫專案寫的有點心累,寫上幾篇設計模式緩解下心中的煩躁。

設計模式是軟體開發人員在軟體開發過程中面臨的一般問題的解決方案。

這些解決方案是眾多軟體開發人員經過相當長的一段時間的試驗和錯誤總結出來的。

android的設計模式分為三大類:

2)結構型模式:

介面卡模式,橋接模式,裝飾模式,組合模式,外觀模式,享元模式,**模式。

今天我們先來**一下設計模式中最常用的

單例模式。

建立型模式一 單例模式:

使用場景:確保乙個類在在記憶體中只有乙個例項,並向全域性提供這個例項。

單例模式分為 懶漢式 ,餓漢式 ,登記式。

懶漢式:在需要的時候,才會建立出本類物件。不需要就不建立。只會建立一次

餓漢式:在程式一開始就建立出本類物件。只會建立一次。

登記式:實際對一組單例模式進行的維護,通過map我們把單例存進去,

這樣在呼叫時,先判斷該單例是否已經建立,

是的話直接返回,

不是的話建立乙個登記到map中,再返回。

在這裡首先講解下懶漢式。

按照慣例,寫乙個小demo。

public class demo 

public static demo getinstance()}}

return demo;

}}

首先,我們把demo這個類的構造方法private修飾起來。

這樣在外部就無法通過new關鍵字建立出demo的物件。

提供乙個本類物件的靜態成員變數demo。

然後提供乙個公共的靜態的方法 getinstance() 獲取本類例項。

因為靜態變數會在編譯時就已經存在於靜態區。屬於乙個全域性變數。不會隨著物件的建立而建立。

所以我們宣告乙個靜態的成員變數demo 用來記錄本類物件是否被建立過。

在這個方法中進行判斷,

如果demo ==null 就建立出本類的例項,賦值給demo。

如果不為空,就說明物件已經被建立。直接返回demo即可。

但是注意!

如果多個執行緒同時訪問該類物件,會造成同時建立多個物件。

所以我們需要加上 synchronized 關鍵字來鎖住這個類。

多個執行緒同時訪問,會按照先後順序進行執行。

所以不會建立出多個物件。

在進行同步鎖之後,我們還要再一次進行判空,

因為同一時間所有的執行緒都會在同步鎖外部進行等待,但是它們已經進行了第一次判空。

如果不加上第二次判空,還是讓這些物件先後順序建立出多個物件。

所以我們需要再次加上乙個內部的判空。

這樣就真正意義上做到了單例模式。

public class demo 

public static demo getinstance()

}

登記式:

說白了 就是使用map集合中管理多個單例模式。

**就不進行書寫了。

單例模式使用的很廣泛。、任何乙個類不讓他有多個例項,都可以讓他進行單例模式。

注意:在開發中是不允許存在太多的靜態變數和靜態方法。因為會存在強引用造成記憶體溢位。

對於那些比較耗記憶體的類,只例項化一次可以大大提高效能,尤其是在移動開發中。

可能乙個程式開發中,這個類不在首頁。使用者不需要一進來就載入這個類。

這種情況下我們就需要懶漢式。 讓我們沒有用到時候不載入物件。    

但是可能這個類需要載入的時間很長。當使用者進行互動的時候在進行載入會有卡頓現象。

這種情況下使用者體驗就很差,我們就需要使用到餓漢式。讓我們的物件在一開始就載入完畢。

Android 設計模式 單例模式

有哪些單例模式 實現方式1 雙重確認 double check lock dcl class singleton public void dosomething public static singleton getinstance return sinstande 為了減少重複 可用泛型來優化 抽...

設計模式之單例設計模式 一)

目錄 1.懶漢式 2.餓漢式 例子 對於系統中的某些類來說,只有乙個例項很重要,例如,乙個系統中可以存在多個列印任務,但是只能有乙個正在工作的任務 乙個系統只能有乙個視窗管理器或檔案系統 乙個系統只能有乙個計時工具或id 序號 生成器。如在windows中就只能開啟乙個任務管理器。如果不使用機制對視...

設計模式一之單例模式

單例模式是最常用到的設計模式之一,熟悉設計模式的朋友對單例模式都不會陌生。一般介紹單例模式的書籍都會提到餓漢式和懶漢式這兩種實現方式。但是除了這兩種方式,本文還會介紹其他幾種實現單例的方式,讓我們來一起看看吧。單例模式是一種常用的軟體設計模式,其定義是單例物件的類只能允許乙個例項存在。許多時候整個系...