1. 程式人生 > 其它 >Vue H5 與 APP 互動 (IOS為例)

Vue H5 與 APP 互動 (IOS為例)

一個類只能有一個例項

主要有兩種,餓漢和懶漢模式。

  • 餓漢: 直接初始化
  • 懶漢: 使用的時候才初始化
/**
 * @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;
}