打字猴:1.70045774e+09
1700457740 //业务处理
1700457741
1700457742 }
1700457743
1700457744 }
1700457745
1700457746 Singleton保证不能通过正常的渠道建立一个对象,那SingletonFactory如何建立一个单例对象呢?答案是通过反射方式创建,如代码清单8-21所示。
1700457747
1700457748 代码清单8-21 负责生成单例的工厂类
1700457749
1700457750 public class SingletonFactory{
1700457751
1700457752 private static Singleton singleton;
1700457753
1700457754 static{
1700457755
1700457756 try{
1700457757
1700457758 Class cl=Class.forName(Singleton.class.getName());
1700457759
1700457760 //获得无参构造
1700457761
1700457762 Constructor constructor=cl.getDeclaredConstructor();
1700457763
1700457764 //设置无参构造是可访问的
1700457765
1700457766 constructor.setAccessible(true);
1700457767
1700457768 //产生一个实例对象
1700457769
1700457770 singleton=(Singleton)constructor.newInstance();
1700457771
1700457772 }catch(Exception e){
1700457773
1700457774 //异常处理
1700457775
1700457776 }
1700457777
1700457778 }
1700457779
1700457780 public static Singleton getSingleton(){
1700457781
1700457782 return singleton;
1700457783
1700457784 }
1700457785
1700457786 }
1700457787
1700457788 通过获得类构造器,然后设置访问权限,生成一个对象,然后提供外部访问,保证内存中的对象唯一。当然,其他类也可以通过反射的方式建立一个单例对象,确实如此,但是一个项目或团队是有章程和规范的,何况已经提供了一个获得单例对象的方法,为什么还要重新创建一个新对象呢?除非是有人作恶。
1700457789
[ 上一页 ]  [ :1.70045774e+09 ]  [ 下一页 ]