設計模式之單例模式介紹

2021-10-01 06:22:37 字數 2067 閱讀 2688

定義:單例模式保證在整個軟體系統記憶體中只存在乙個類的例項,並且該類只有乙個方法可以獲取例項。屬於建立型設計模式。

注意:必須將該類的構造方法私有化。

餓漢式(靜態常量):

/**

* 使用靜態常量的餓漢式單例模式demo

*/public class eagersingletondemo1

public static eagersingletondemo1 getinstance()

}//優點:執行緒安全,簡單。

//缺點:不屬於懶載入,在裝載該類時會立即初始化該變數,浪費記憶體。可以實際使用

餓漢式(靜態常量加靜態**塊):
/**

* 使用靜態常量的餓漢式單例模式demo,用靜態**塊建立並初始化。

*/public class eagersingletondemo2

static

public static eagersingletondemo2 getinstance()

}//優點:執行緒安全,簡單。

//缺點:不屬於懶載入,在裝載該類時會立即初始化該變數,浪費記憶體。可以實際使用

懶漢式(執行緒不安全):
/**

* 懶漢式單例模式執行緒不安全

*/public class lazyloadingsingletondemo1

public static lazyloadingsingletondemo1 getinstance()

return instance;

}}

懶漢式(執行緒安全)
/**

* 懶漢式單例模式執行緒安全,方法級同步

*/public class lazyloadingsingletondemo1

public static synchronized lazyloadingsingletondemo1 getinstance()

return instance;

}}//優點:執行緒安全,懶載入。

雙重檢查懶漢式:
public class doublechecklazyloadingsingletondemo 

public static doublechecklazyloadingsingletondemo getinstance()}}

return instance;

}}//懶載入,執行緒安全,只有第一批進去的執行緒要同步,剩下的不需要同步,效能也好。推薦使用。

靜態內部類的特點:

裝載外部類時不會裝載靜態內部類。

jvm保證類的裝載過程執行緒安全。

只裝載一次。

/**

* 使用靜態內部類實現單例模式demo。

*/public class staticinnerclasssingletondemo

private static class innerclass

/*** 呼叫這個方法時會裝載innerclass類,初始化例項,並且執行緒安全,並且只會裝載一次。

* @return

*/public static staticinnerclasssingletondemo getinstance()

}

使用列舉方式實現單例:
/**

* 使用列舉方式實現單例。

*/public enum singletonwithenum

public void sumab()

}//測試通過

public void testsingletonwithenum()

//執行緒安全,並且可以防止反序列化建立新物件。

單例模式注意事項和細節說明:

單例模式保證了系統記憶體中該類只存在乙個物件,節省了系統資源,對於一些需要頻繁建立銷毀的物件,使用單例模式可以提高系統效能。

當想要例項化乙個單例類的時候,必須要記住使用響應的獲取物件的方法。而不是使用new。

單例模式的使用場景:需要頻繁進行建立和銷毀的物件,建立物件耗時耗資源過多,但又經常使用(資料來源,工廠等)。

Python 設計模式介紹 單例模式

1 單例是只有乙個例項 2 通過靜態欄位 靜態字段偽造出乙個單例效果 3 什麼時候用 當所有例項中封裝的資料相同時,建立單例模式 eg 連線池 用單例模式建立連線池 class cp instance none def init self self.ip 1.1.1.1 self.port 3306...

設計模式之單例模式

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

設計模式之單例模式

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