单例设计模式 序列化破坏单例模式原理解析及解决方案?
序列化和反序列化 反射的破坏
单例模式:提前实例化
/**
* 单例模式:提前实例化
*
* @author xuan
* @createTime 2022/6/1
*/
public class EarlyInstance {
private static final Logger LOG = LoggerFactory.getLogger(EarlyInstance.class);
private static final EarlyInstance EARLY_INSTANCE = new EarlyInstance();
private EarlyInstance() {
}
public static EarlyInstance getInstance() {
return EARLY_INSTANCE;
}
public void doService(){
LOG.info("单例模式:提前实例化 ");
}
}
单例模式:延迟实例化
/**
* 单例模式:延迟实例化
*
* @author xuan
* @createTime 2022/6/1
*/
public class LazyInstance {
private static final Logger LOG = LoggerFactory.getLogger(LazyInstance.class);
private static LazyInstance LAZY_INSTANCE;
private LazyInstance() {
}
public static LazyInstance getInstance() {
if (null == LAZY_INSTANCE) {
synchronized (LazyInstance.class) {
if (null == LAZY_INSTANCE) {
LAZY_INSTANCE = new LazyInstance();
}
}
}
return LAZY_INSTANCE;
}
public void doService(){
LOG.info("单例模式:延迟实例化");
}
}