package effectiveJava;
/**
* @author: daixyhymn
* @description:
* @date: 2020/11/12 10:03
*/
/**
* 饿汉式
*/
public class Singleton {
public static final Singleton instance = new Singleton();
private Singleton(){
/**
* 防止反射破环单例
*/
if (instance != null){
throw new RuntimeException();
}
}
/**
* 防止反序列化破环单例
* @return
*/
private Object readResolve(){
return instance;
}
}
class Singleton3{
private static final Singleton3 instance = new Singleton3();
private Singleton3(){}
public static Singleton3 getInstance(){
return instance;
}
}
/**
* 静态内部类
*/
class Singleton4{
private Singleton4(){}
private static class SingletonHolder{
private static final Singleton4 singleton4= new Singleton4();
}
public static Singleton4 getInstance(){
return SingletonHolder.singleton4;
}
}
/**
* 双重校验锁
*/
class Singleton5{
private Singleton5(){}
private volatile static Singleton5 singleton5;
public static Singleton5 getInstance(){
if (singleton5 == null) {
synchronized (Singleton5.class){
if (singleton5 == null) {
singleton5 = new Singleton5();
}
}
}
return singleton5;
}
}
/**
* 枚举
*/
enum Singleton2{
INSTANCE;
private String name;
public String getName(){
return this.name;
}
public void setName(String name){
this.name = name;
}
}