第3条:用私有构造器或者枚举类型强化Singleton属性_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 第3条:用私有构造器或者枚举类型强化Singleton属性

第3条:用私有构造器或者枚举类型强化Singleton属性

 2014/7/23 22:01:14  黑龙0110  程序员俱乐部  我要评论(0)
  • 摘要:Singleton大家应该不会很陌生,下面给个给个示例,里面讲了几个我们经常实现单例的方法:publicclassSingleton{/*持有私有静态实例,防止被引用,此处赋值为null,目的是实现延迟加载*/privatestaticSingletoninstance=null;/*私有构造方法,防止被实例化*/privateSingleton(){}/***这个类可以满足基本要求,但是,像这样毫无线程安全保护的类,如果我们把它放入多线程的环境下,肯定就会出现问题了
  • 标签:构造 构造器 枚举
     Singleton大家应该不会很陌生,下面给个给个示例,里面讲了几个我们经常实现单例的方法:
class="java">

public class Singleton {

	/* 持有私有静态实例,防止被引用,此处赋值为null,目的是实现延迟加载 */
	private static Singleton instance = null;

	/* 私有构造方法,防止被实例化 */
	private Singleton() {
	}

	/**
	 * 这个类可以满足基本要求,但是,像这样毫无线程安全保护的类,如果我们把它       放入多线程的环境下,肯定就会出现问题了,
	 * 
	 * @return
	 */
	public static Singleton getInstance() {
		if (instance == null) {
			instance = new Singleton();
		}
		return instance;
	}

	/*
	 * 
	 * synchronized关键字锁住的是这个对象,这样的用法,在性能上会有所下降,因为每次调用getInstance(),都要对对象上锁,事实上,
	 * 只有在第一次创建对象的时候需要加锁,之后就不需要了,所以,这个地方需要改进。
	 */
	public static synchronized Singleton getInstance1() {
		if (instance == null) {
			instance = new Singleton();
		}
		return instance;
	}

	public static Singleton getInstance2() {
		if (instance == null) {
			synchronized (instance) {
				if (instance == null) {
					instance = new Singleton();
				}
			}
		}
		return instance;
	}

	/* 如果该对象被用于序列化,可以保证对象在序列化前后保持一致 */
	public Object readResolve() {
		return instance;
	}
}




    那从Java1.5开始,可以使用枚举来实现实现单例。
public enum Singleton{
    INSTANCE;

}


    这种方法更加简洁。而且无常的提供了序列化机制,绝对防止多次实例化,即使是在面对复杂的序列化或者反序列化攻击的时候。
上一篇: JSONArray和JSONObject的使用 下一篇: 没有下一篇了!
发表评论
用户名: 匿名