//枚举式单例模式
public enum EnumSingleton
{
INSTANCE;
//等价于==>饿汉式单例模式
// static
// {
// INSTANCE=new EnumSingleton("INSATNCE",0);
// }
private Object data;
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public static EnumSingleton getInstance(){
//返回当前类的单例对象
return INSTANCE;
};
}
测试:
//枚举式_单例_测试类
public class enum_test
{
public static void main(String[] args)
{
try
{
//检验序列化是否会破坏单例模式
EnumSingleton singleton=null;
singleton=EnumSingleton.getInstance();
singleton.setData(new Object());
//刷入硬盘
FileOutputStream fos=new FileOutputStream("EnumSignleton.obj");
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(singleton);
oos.flush();
oos.close();
//读取出来
FileInputStream fis=new FileInputStream("EnumSignleton.obj");
ObjectInputStream ois=new ObjectInputStream(fis);
EnumSingleton o = (EnumSingleton)ois.readObject();
ois.close();
System.out.println(singleton.getData());
System.out.println(o.getData());
System.out.println(singleton.getData()==o.getData());
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
枚举式单例模式特点:
//容器式单例
public class containerSingleton
{
//构造器私有化
private containerSingleton(){}
//ioc容器 并发容器
private static Map<String,Object> ioc=new ConcurrentHashMap<>();
public static Object getBean(String className)
{
synchronized (ioc)
{
if(!ioc.containsKey(className))
{
Object obj=null;
try
{
obj=Class.forName(className).newInstance();
ioc.put(className,obj);
}
catch (Exception e)
{
e.printStackTrace();
}
return obj;
}
else
return ioc.get(className);
}
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/m0_53157173/article/details/120628193
内容来源于网络,如有侵权,请联系作者删除!