設計模式-單例模式的實現
阿新 • • 發佈:2020-07-23
單例模式
單例模式的實現方式
- 餓漢式
- 懶漢式 執行緒不安全
- 餓漢式 執行緒安全
- 雙重檢查 執行緒安全 提高效率
- 靜態內部類
- 列舉類
實現程式碼:
package cn.tangg; /** * 餓漢式 */ public class Singleton { private static Singleton instance = new Singleton(); private Singleton() {} static Singleton getInstance() { return instance; } } /** * 懶漢式 執行緒不安全 */ class Singleton2 { private static Singleton2 instance; private Singleton2(){} static Singleton2 getInstance() { if (instance == null) { instance = new Singleton2(); } return instance; } } /** * 懶漢式 執行緒安全 * 加類鎖 */ class Singleton3{ private static Singleton3 instance; private Singleton3(){} public static synchronized Singleton3 getInstance() { if (instance == null) { instance = new Singleton3(); } return instance; } } /** * 雙重檢查加鎖 */ class Singleton4{ private static volatile Singleton4 instance; private Singleton4(){} public static Singleton4 getInstance() { if (instance == null) { synchronized (Singleton4.class) { if (instance == null) { instance = new Singleton4(); } } } return instance; } } /** * 靜態內部類 * 靜態內部類會在第一次被使用的時候被初始化,並且也只會被初始化一次,所以也包含懶載入和執行緒安全的特性。 */ class Singleton5{ private Singleton5(){} public static Singleton5 getInstance() { return SingletonHolder.instance; } public static class SingletonHolder{ public static final Singleton5 instance = new Singleton5(); } } /** * 列舉單例 */ enum Singleton6 { INSTANCE; private String name = "Hello World!"; public String getName() { return name; } public void setName(String name) { this.name = name; } }