設計模式之單例模式

2021-10-07 15:10:54 字數 2620 閱讀 7150

確保乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。

// 1.懶漢式單例

static class singleton1

// 暴露公有靜態方法

public static singleton1 getinstance()

return minstance;

}}

以上是簡單的懶漢式單例實現,如果單例類中有作網路請求、快取操作或執行緒池策略等耗時操作,會建立多個不同的例項,以下稍作改動,模擬耗時操作。

main()中新增

for (int i = 0; i < 100; i++) 

}.start();

}

getinstance()中新增,再執行結果
try  catch (interruptedexception e) 

---------- 節選結果 ----------

index = 1, instance: com.example.designmodedemo.singleton.singletonmode$singleton1@6b52350c

懶漢式單例

懶漢式單例

懶漢式單例

index = 7, instance: com.example.designmodedemo.singleton.singletonmode$singleton1@4a1a7268

懶漢式單例

懶漢式單例

index = 9, instance: com.example.designmodedemo.singleton.singletonmode$singleton1@ce407e7

懶漢式單例

懶漢式單例

懶漢式單例

index = 11, instance: com.example.designmodedemo.singleton.singletonmode$singleton1@59ac37b1

index = 8, instance: com.example.designmodedemo.singleton.singletonmode$singleton1@1dca18a4

index = 13, instance: com.example.designmodedemo.singleton.singletonmode$singleton1@5795dfe4

index = 10, instance: com.example.designmodedemo.singleton.singletonmode$singleton1@7898c39

index = 6, instance: com.example.designmodedemo.singleton.singletonmode$singleton1@fb49a4f

index = 5, instance: com.example.designmodedemo.singleton.singletonmode$singleton1@47c48106

index = 3, instance: com.example.designmodedemo.singleton.singletonmode$singleton1@6fada00f

輸出的雜湊位址不相等說明物件多次建立。想要執行緒安全,需要加synchronized關鍵字。

1、直接鎖方法。鎖方法的缺陷是同步鎖粒度太大,耗效能

2、雙重校驗dcl。同步鎖粒度小很多。由於jvm有指令重排特殊性,會導致雙重校驗失效,靜態變數需要新增volatile關鍵字

private volatile static singleton1 sinstance = null;

public static singleton1 getinstance() catch (interruptedexception e)

synchronized(singleton1.class) }}

return sinstance;

}

static class singleton2 

public static singleton2 getinstance() catch (interruptedexception e)

return sinstance;

}}

static class singleton3 

private static class holder

// 延時載入

public final static singleton3 getinstance()

}

static class singleton4 {}

enum enumdemo

public singleton4 getinstance()

}

static class singleton5 {}

static class singletonmanager

}public static object getclass(string key)

}

學習筆記,如有錯漏,理解不到位,煩請多多提點,拜謝!

設計模式之單例模式

前一段時間買了一本秦小波寫的 設計模式之禪 網上對這書的評價很高。現在還沒有看很多,但是有些地方頗有感觸,也並不是所有的地方都能看懂,但是會慢慢研究的。自己對於設計模式的感覺就是乙個字 牛!感覺會23種設計模式並且會熟練運用的人,真的就是大師級的牛人了,設計模式是乙個專案主管或者架構師一定要會的東西...

設計模式之單例模式

package com.xie.singleton public class singleton 提供乙個共有的靜態的入口方法 public static singleton getinstance 懶漢式 延遲載入 提供乙個私有的靜態的成員變數,但不做初始化 private static sing...

設計模式之 單例模式

單例模式 singleton 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。單例模式 單件模式 使用方法返回唯一的例項 public class singleton private static singleton instance public static singleton geti...