單列模式是設計模式中使用最為普遍的模式之一,它是一種對象創建模式,用於產生一個對象的實例,它可以確保一個類只產生一個實例。 單例模式的兩大好處: 1.對於頻繁使用的對象,可以省略創建對象花費的時間。 2.因為new減少,所以對記憶體使用頻率降低,可以減少gc壓力,縮短jc停頓時間。 單例類實現方式:使 ...
單列模式是設計模式中使用最為普遍的模式之一,它是一種對象創建模式,用於產生一個對象的實例,它可以確保一個類只產生一個實例。
單例模式的兩大好處:
1.對於頻繁使用的對象,可以省略創建對象花費的時間。
2.因為new減少,所以對記憶體使用頻率降低,可以減少gc壓力,縮短jc停頓時間。
角色 | 作用 |
單例類 | 提供單例工廠,返回單例 |
使用者 | 獲取並使用單例 |
單例類實現方式:使用內部類的方式實現單例,既可以做到延遲載入,又不必使用同步關鍵字,是一種比較完善的方式。
1 public class Singleton{ 2 private Singleton(){} 3 private static class SingletonHolder{ 4 private static Singleton instance = new Singleton(); 5 } 6 7 public static Singleton getInstance(){ 8 return SingletonHolder.instance; 9 } 10 11 12 }
註意:序列化和反序列可能會破壞單例,一般來說,對單列進行序列化和反序列化的場景並不多見,但如果存在就需要註意。
package com.design.singleton; import java.io.Serializable; public class SerSingleton implements Serializable { private static final long serialVersionUID = 1L; private SerSingleton(){} private static class SerSingletonHolder{ private static SerSingleton serSingleton = new SerSingleton(); } public static SerSingleton getInstance(){ return SerSingletonHolder.serSingleton; } /** * 阻止生成新的實例,總是返回當前實例 * @return */ private Object readResolve(){ return SerSingletonHolder.serSingleton; } }