最全的單例模式

2021-10-17 03:24:31 字數 2658 閱讀 3305

/**

* @author jason [email protected]

* @date 2021/1/21 18:20

*//**

* @author jason [email protected]

* @date 2021/1/21 18:20

*/public class person ).start();}}

}

發現每次建立物件都是新的物件,單例模式要求每次建立的物件是同乙個物件
com.aistrong.singleton.person@74b47802

com.aistrong.singleton.person@74f84cf

com.aistrong.singleton.person@72d6db17

com.aistrong.singleton.person@5015b31e

/**

* 餓漢式

* 優點:寫法簡單,執行緒安全

* 缺點:當類被載入到記憶體中的時候,就會建立物件,造成記憶體浪費

* * @author jason [email protected]

* @date 2020/12/29 0:41

*/public class singleton1

//當類被載入的時候就會初始化物件

private static singleton1 singleton1 = new singleton1();

//對外提供訪問的方法

public static singleton1 getsingleton1()

//開啟100個執行緒來獲取單例物件,看是否每次獲取的是同乙個物件

//如果物件的hashcode一致,則證明為同乙個物件

public static void main(string args) ).start();}}

}

/**

* 懶漢式

* 優點:不會在類載入到記憶體中時候就建立物件,相對於餓漢式來說,不會造成記憶體浪費

* 缺點:因為是第一次使用的時候去建立物件,在多執行緒環境中容易造成執行緒不安全問題

* @author jason [email protected]

* @since 2020/12/29 9:21

*/public class singleton

//定義這個單例物件

private static volatile singleton singleton;

//對外提供方法

//雙重檢查鎖

public static singleton getsingleton() }}

return singleton;

}//開啟100個執行緒來獲取單例物件,看是否每次獲取的是同乙個物件

//如果物件的hashcode一致,則證明為同乙個物件

public static void main(string args) ).start();}}

}

/**

* 匿名內部類方式

* 優點:即實現了懶載入,又能在不加鎖的同時保證執行緒安全

* 缺點:**寫法比較少見,不能算缺點

* 原理:載入乙個類時,其內部類不會同時被載入,乙個類被載入時,

* 當且僅當某個靜態成員(靜態域、構造器、靜態方法)被呼叫時發生

* * @author jason [email protected]

* @date 2021/1/21 18:42

*/public class singleton2

//靜態內部類被呼叫的時候,建立外部類的例項物件

private static class sonsingleton2

//對外提供靜態方法提供例項

public static singleton2 getinstance()

//開啟100個執行緒來獲取單例物件,看是否每次獲取的是同乙個物件

//如果物件的hashcode一致,則證明為同乙個物件

public static void main(string args) ).start();}}

}

/**

* 列舉類實現單例模式

* 優點:能防止反序列化來建立物件,執行緒安全

* 缺點:無

* * @author jason [email protected]

* @date 2021/1/21 20:27

*/public enum datasourceenum

//對外提供例項方法

public dbconnection getconnection()

//測試方法

//輸出結果發現均為同乙個物件

public static void main(string args) ).start();}}

}

/**

* 上個類中的 dbconnection

* @author jason [email protected]

* @date 2021/1/21 20:29

*/public class dbconnection

單例模式 單例模式

餓漢式 急切例項化 public class eagersingleton 2.宣告靜態成員變數並賦初始值 類初始化的時候靜態變數就被載入,因此叫做餓漢式 public static eagersingleton eagersingleton new eagersingleton 3.對外暴露公共的...

單例 單例模式

簡單的實現乙個單例 instancetype sharedinstance return instance 真正的單例模式 myclass sharedinstance return instance id allocwithzone nszone zone return nil id copywi...

多個單例模式單例模式的應用

我們在程式設計中需要乙個單例,但不僅僅是乙個單例,更多的是需要單例中的單例 即 類a為控制器,類b為例項面板 為方便找到類a,採用單例,而類a為方便找到類b,採用單例中的單例 單例a 單例b 第二個不要用new a.getinstance b.呼叫方法 import b public class a...