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;
}
}