singleton(单例化)一个对象的几种方法
Posted 傻瓜不傻108
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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(单例化)一个对象的几种方法的主要内容,如果未能解决你的问题,请参考以下文章