Vue H5 與 APP 互動 (IOS為例)
阿新 • • 發佈:2021-11-30
一個類只能有一個例項
主要有兩種,餓漢和懶漢模式。
- 餓漢: 直接初始化
- 懶漢: 使用的時候才初始化
/** * @Classname 單例模式 * @Description TODO * @Date 2021/9/23 17:24 * @Created by huangsm */ public class 單例模式 { /** * 一個類只能存在一個物件例項 * * @param args */ public static void main(String[] args) { //java程式碼典型使用,使用的是靜態變數 Runtime runtime = Runtime.getRuntime(); } } /** * 餓漢模式(靜態變數) */ class SingletonStatic { //通過靜態變數直接初始化 private final static SingletonStatic instance = new SingletonStatic(); //私有構造方法 private SingletonStatic() { } //所有其他類通過此方法拿到靜態變數 public static SingletonStatic getInstance() { return instance; } } /** * 餓漢模式(靜態程式碼塊) */ class SingletonStaticBlock { //建立內部物件 private static SingletonStaticBlock instance; //在靜態程式碼塊中建立單例物件 static { instance = new SingletonStaticBlock(); } //私有構造方法 private SingletonStaticBlock() { } //所有其他類通過此方法拿到靜態變數 public static SingletonStaticBlock getInstance() { return instance; } } /** * 懶漢模式(執行緒不安全) */ class SingletonUnSafe { //建立內部物件 private static SingletonUnSafe instance; //私有構造方法 private SingletonUnSafe() { } //所有其他類通過此方法拿到靜態變數 public static SingletonUnSafe getInstance() { if (instance == null) { instance = new SingletonUnSafe(); } return instance; } } /** * 懶漢模式(同步方法) */ class SingletonSync { //建立內部物件 private static SingletonSync instance; //私有構造方法 private SingletonSync() { } //所有其他類通過此方法拿到靜態變數 public static synchronized SingletonSync getInstance() { if (instance == null) { instance = new SingletonSync(); } return instance; } } /** * 懶漢模式(同步程式碼塊) */ class SingletonSyncBlock { //建立內部物件 private static SingletonSyncBlock instance; //私有構造方法 private SingletonSyncBlock() { } //所有其他類通過此方法拿到靜態變數 public static SingletonSyncBlock getInstance() { if (instance == null) { synchronized (SingletonSyncBlock.class) { instance = new SingletonSyncBlock(); } } return instance; } } /** * 雙重檢查 */ class SingletonDoubleCheck { //建立內部物件 private static volatile SingletonDoubleCheck instance; //私有構造方法 private SingletonDoubleCheck() { } //所有其他類通過此方法拿到靜態變數 public static SingletonDoubleCheck getInstance() { if (instance == null) { synchronized (SingletonSyncBlock.class) { if (instance == null) { instance = new SingletonDoubleCheck(); } } } return instance; } } /** * 靜態內部類 */ class SingletonStaticClass { //建立內部物件 private static volatile SingletonStaticClass instance; //私有構造方法 private SingletonStaticClass() { } //所有其他類通過此方法拿到靜態變數 public static SingletonStaticClass getInstance() { return Singleton.INSTANCE; } private static class Singleton { private static final SingletonStaticClass INSTANCE = new SingletonStaticClass(); } } /** * 列舉類 */ enum SingletonEnum { INSTANCE; }