首页 > 代码库 > 三、singleton(单例化)一个对象的几种方法
三、singleton(单例化)一个对象的几种方法
方案一:私有化构造器,通过static final域
@Test public void test13() { A215 a=A215.a; A215 b=A215.a; System.out.println(a==b);//true }class A215{ public static final A215 a=new A215(); private A215(){}}
方案二:私有化构造器,私有化static final域通过工厂模式来实现
@Test public void test20() { A211 a1=A211.getA211(); A211 a2=A211.getA211(); System.out.println(a1==a2);//true }class A211{ private static final A211 a=new A211(); public static A211 getA211(){ return a; }}
方案三,通过Enum来实现
@Test public void test12() { A216 a217 = A216.A217; A216 a218 = A216.A217; System.out.println(a217==a218);//true }}enum A216{ A217; private A217 a=null; private A216(){ a=new A217(); a.name="wangyang"; } public A217 getA217(){ return a; } }class A217{ public String name; public void hello(){ System.out.println("hello "+name); }}
其实对于第一种,和第二种方法。通过反射或者序列化可以打破其单例的实现,但第三种无偿地提供了序列化机制,绝对防止多次实例化,即使是在面对复杂的序列化或者反射攻击的时候
三、singleton(单例化)一个对象的几种方法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。