定義:單例模式保證在整個軟體系統記憶體中只存在乙個類的例項,並且該類只有乙個方法可以獲取例項。屬於建立型設計模式。
注意:必須將該類的構造方法私有化。
餓漢式(靜態常量):
/**
* 使用靜態常量的餓漢式單例模式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...