首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

单例模式常见的几种模式

2013-07-09 
单例模式常见的几种形式一,饿汉式单例//饿汉式单例1public class Singleton1 {private static final Singl

单例模式常见的几种形式

一,饿汉式单例

//饿汉式单例1public class Singleton1 {private static final Singleton1 instance = new Singleton1();private Singleton1(){}public static Singleton1 getInstance(){return instance;}}//饿汉式单例2class Singleton{private static class Single{static final Singleton instance = new Singleton();}private Singleton(){}public static Singleton getInstance(){return Single.instance;}}

?

二,懒汉式单例

//懒汉式单例public class Singleton2 {private static Singleton2 instance = null;private Singleton2(){}public static synchronized Singleton2 getInstance(){if(instance == null){instance = new Singleton2();}return instance;}}

?

三,DCL双重锁检测式单例

//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}

?

?

四,登记式单例

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}

?

热点排行