單例三種模式

1.餓漢單例
package com.demo.gyw.java.design_pattern.singleton;
/**
* @Description:    惡漢單例
* @Author:         gyw
* @CreateDate:     2019/11/5 11:38
* @Version:        1.0
*/
public class EvilManSingleton {

    private static EvilManSingleton instance = new EvilManSingleton();

    private EvilManSingleton() {
    }

    public static EvilManSingleton getInstance() {
        return instance;
    }
}

2.懶漢單例
package com.demo.gyw.java.design_pattern.singleton;

import java.util.Objects;

/**
* @Description:    懶漢單例
 *  懶漢模式在使用時,容易引起不同步問題,所有應該創建同步鎖
* @Author:         gyw
* @CreateDate:     2019/11/5 11:41
* @Version:        1.0
*/
public class SlackerSingleton {
    //私有靜態類
    private static SlackerSingleton instance = null;

    /**
     * 私有構造方法
     */
    private SlackerSingleton() {

    }

    /**
     * 公共靜態獲取類對象方法
     * @return
     */
    public static SlackerSingleton getInstance() {
        if (Objects.isNull(instance)) {
            instance = new SlackerSingleton();
        }
        return instance;
    }
}

3.雙重判斷懶漢單例

package com.demo.gyw.java.design_pattern.singleton;

import java.util.Objects;

/**
* @Description:    雙重判斷懶漢單例
* @Author:         gyw
* @CreateDate:     2019/11/5 11:48
* @Version:        1.0
*/
public class JudgeIfSingleton {
    /**
     * 私有靜態實例 防止被引用,此處賦值爲null,目的是實現延遲加載
     */
    private static JudgeIfSingleton instance = null;

    /**
     * 私有構造方法,防止被實例化
     */
    private JudgeIfSingleton() {

    }

    /**
     * 公共靜態
     * @return
     */
    public static JudgeIfSingleton getInstance() {
        //先檢查實例是否存在,如果不存在才進入下面的同步塊
        if (Objects.isNull(instance)) {
            //同步塊,線程安全地創建實例
            synchronized (JudgeIfSingleton.class) {
                if (Objects.isNull(instance)) {
                    instance = new JudgeIfSingleton();
                }
            }
        }
        return instance;
    }
}






 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章