设计模式之单例模式 (一)(三)
2014-11-23 23:34:41
·
作者:
·
浏览: 2
on5)conc.newInstance();
System.out.println(ins2);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("testSingleton5:"+(ins.equals(ins2) "same":"diff"));
System.out.println();
}
public static void testSingleton6()
{
Singleton6 ins=Singleton6.getInstance();//得到第一个实例
System.out.println(ins);
Singleton6 ins2=null;
try {
Class c = Class.forName("com.open.design.singleton.Singleton6");//用反射得到第二个实例,这里引用类的时候得写全路径,否则会报找不到类
Constructor[] con = c.getDeclaredConstructors();
Constructor conc = con[0];
conc.setAccessible(true);
ins2 = (Singleton6)conc.newInstance();
System.out.println(ins2);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("testSingleton6:"+(ins.equals(ins2) "same":"diff"));
System.out.println();
}
public static void testSingleton7()
{
Singleton7 ins=Singleton7.getInstance();//得到第一个实例
System.out.println(ins);
Singleton7 ins2=null;
try {
Class c = Class.forName("com.open.design.singleton.Singleton7");//用反射得到第二个实例,这里引用类的时候得写全路径,否则会报找不到类
Constructor[] con = c.getDeclaredConstructors();
Constructor conc = con[0];
conc.setAccessible(true);
ins2 = (Singleton7)conc.newInstance();
System.out.println(ins2);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("testSingleton7:"+(ins.equals(ins2) "same":"diff"));
System.out.println();
}
}
查看打印结果,发现枚举类单例通过反射获取失败,其它单例形式反射成功,证明枚举类型最安全。
html
http://blog.csdn.net/kerryyw/article/details/7237821
http://sucre.blog.51cto.com/1084905/569511
http://www.blogjava.net/kenzhh/archive/2013/03/15/357824.html
代码地址:https://github.com/zz7zz7zz/design-pattern