设计模式之单例模式 (一)(三)

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