1. 程式人生 > 其它 >基本漏洞原理及防禦(2)

基本漏洞原理及防禦(2)

單例設計模式

懶漢式

/*
 * 單例設計模式:懶漢式
 * */
public class SingleTonDemo02 {
    public static void main(String[] args) {
        Demo02 instance1 = Demo02.getInstance();
        Demo02 instance2 = Demo02.getInstance();
        System.out.println(instance1 == instance2);
    }
}

class Demo02 {
    // 1.私有化類的構造器
    private Demo02() {
    }

    // 2.在內部靜態宣告,沒初始化
    private static Demo02 instance = null;

    // 宣告一個公共靜態的返回這個例項物件的方法
    public static Demo02 getInstance() {
        // 判斷是否例項化過
        if (instance != null) {
            // 例項賦值
            instance = new Demo02();
        }
        return instance;
    }
}

餓漢式

package com.designMode.singleTon;
/*
* 單例設計模式:餓漢式
* */
public class SingleTonDemo01 {
    public static void main(String[] args) {
        // 可以拿到
        Demo01 instance = Demo01.getInstance();
        // 無論第幾次都是同一個,只有一個例項
        Demo01 instance1 = Demo01.getInstance();

        // 為true
        System.out.println(instance == instance1);
    }
}

// 餓漢式
class Demo01 {
    // 1.私有化類的構造器
    private Demo01() {
    }
    // 2.內部靜態建立類的物件
    private static Demo01 instance = new Demo01();
    // 3.提供公共的靜態方法
    public static Demo01 getInstance() {
        return instance;
    }
}

區別

餓漢式:

  • 壞處:開始就建立物件,生命週期過長,節約時間
  • 好處:執行緒安全

懶漢式:

  • 好處:延遲物件的建立,節約記憶體
  • 壞處:目前寫法不安全