单例几种常见的模式
单例几种常见的形式原文地址:http://forestqqqq.iteye.com/blog/1896723一,饿汉式单例Java代码//饿汉式单
单例几种常见的形式
原文地址:http://forestqqqq.iteye.com/blog/1896723
一,饿汉式单例
Java代码
- //饿汉式单例1??
- public?class?Singleton1?{??
- ????private?static?final?Singleton1?instance?=?new?Singleton1();??
- ????private?Singleton1(){}??
- ????public?static?Singleton1?getInstance(){??
- ????????return?instance;??
- ????}??
- }??
- ??
- //饿汉式单例2??
- class?Singleton{??
- ????private?static?class?Single{??
- ????????static?final?Singleton?instance?=?new?Singleton();??
- ????}??
- ????private?Singleton(){}??
- ????public?static?Singleton?getInstance(){??
- ????????return?Single.instance;??
- ????}??
- }??
?
二,懒汉式单例
Java代码
- //懒汉式单例??
- public?class?Singleton2?{??
- ????private?static?Singleton2?instance?=?null;??
- ????private?Singleton2(){}??
- ????public?static?synchronized?Singleton2?getInstance(){??
- ????????if(instance?==?null){??
- ????????????instance?=?new?Singleton2();??
- ????????}??
- ????????return?instance;??
- ????}??
- }??
?
三,DCL双重锁检测式单例
Java代码
- //DCL双重锁检测式单例??
- public?class?Singleton3?{??
- ????private?volatile?static?Singleton3?instance?=?null;??
- ????private?Singleton3(){}??
- ????public?static?Singleton3?getInstance(){??
- ????????if(instance?==?null){??
- ????????????synchronized(Singleton3.class){??
- ????????????????if(instance?==?null){??
- ????????????????????instance?=?new?Singleton3();??
- ????????????????}??
- ????????????}??
- ????????}??
- ????????return?instance;??
- ????}??
- //参考文章:http://www.ibm.com/developerworks/cn/java/j-dcl.html??
- }??
?
?
四,登记式单例
Java代码
- import?java.lang.reflect.Constructor;??
- import?java.util.HashMap;??
- import?java.util.Map;??
- ??
- //登记式单例??
- public?class?Singleton4?{??
- ????private??static?final?Map<String,Singleton4>?instances?=??
- ????????????new?HashMap<String,Singleton4>();??
- ????static{??
- ????????Singleton4?instance?=?new?Singleton4();??
- ????????instances.put(instance.getClass().getName(),?instance);??
- ????}??
- ????protected?Singleton4(){}??
- ????public?static?synchronized?Singleton4?getInstance(String?name){??
- ????????if(name?==?null){??
- ????????????name?=?Singleton4.class.getName();??
- ????????}??
- ????????if(instances.get(name)?==?null){??
- ????????????try?{??
- ????????????????Constructor?con?=?Class.forName(name).getDeclaredConstructor();??
- ????????????????con.setAccessible(true);??
- ????????????????instances.put(name,?(Singleton4)con.newInstance());??
- ????????????}?catch?(Exception?e)?{??
- ????????????????e.printStackTrace();??
- ????????????}??
- ????????}??
- ????????return?instances.get(name);??
- ????}??
- //参考文章:http://www.cnblogs.com/whgw/archive/2011/10/05/2199535.html??
- }??