精講Android設計模式 單例模式

2021-09-11 15:35:09 字數 1616 閱讀 1042

單例的優點

1.只有乙個例項,節省開銷 2.全域性使用方便,同時避免頻繁建立和銷毀

使用單例的注意點: 要避免造成 記憶體洩漏

單例不僅要滿足執行緒安全,還要注意防止序列化產生新物件。如果單例實現了serializable介面,就必須加入如下方法(列舉單例不用這麼做,因為jvm能保障這點):

private object readresolve

()throws objectstreamexception

複製**

餓漢式:就是在類初始化時就例項化,所以是執行緒安全的。 缺點是: 1.沒有懶載入,在不需要的時候也會被例項化,造成記憶體浪費。 2.例項化方法對外部呼叫不友好,傳參不方便

public

class

singleton

implements

serializable

public

static singleton getinstance

() /**

* 如果實現了serializable, 必須重寫這個方法

*/private object readresolve

()throws objectstreamexception

}複製**

延遲載入(使用時載入),節省記憶體 雙重判空,第一次判空防止重複加鎖,第二次判空才例項化 防止dcl指令重拍序,加volatile關鍵字

public

class

singleton

public

static singleton getsingleton

() }

}return instance;

}}//如果實現了serializable, 必須重寫同上面餓漢式一樣的readresolve方法

複製**

由jvm保證執行緒安全 序列化和反射攻擊已經被列舉解決

//enum列舉類

public

enum singleton

}複製**

當singleton被載入時,其內部類並不會被初始化,故可以確保當 singleton類被載入jvm時,不會初始化單例類。只有 getinstance() 方法呼叫時,才會初始化 instance。同時,由於例項的建立是時在類載入時完成,故天生對多執行緒友好,getinstance() 方法也無需使用同步關鍵字。

public

class

singleton

/**

* 私有化構造方法

*/private

singleton()

public

static singleton getinstance()

}複製**

(1)單例模式精講

只能生成乙個例項的類就是實現了singleton 單例 模式的型別。這種寫法只適用於單執行緒環境,上 public class singleton 每次獲取例項的時候通過呼叫此類方法 public static singleton instance return instance 缺點 只適用於單執...

設計模式精講

c 實現設計模式 1 設計模式簡介 c 實現設計模式 2 模板方法 c 實現設計模式 3 strategy模式 c 實現設計模式 4 觀察者模式 c 實現設計模式 5 裝飾模式 c 實現設計模式 6 橋模式 c 實現設計模式 7 工廠模式 c 實現設計模式 8 抽象工廠模式 c 實現設計模式 9 原...

Android 設計模式 單例模式

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