码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式中饿汉式单例类和懒汉式单例类

时间:2015-03-13 09:21:36      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:设计模式   singleton   

单例模式的特点为:

*单例类只有一个实例。

*单例类必须自己创建自己的唯一实例。

*单例类必须给所有其他对象提供这一实例。

饿汉式单例类:

而饿汉式单例类则在java语言中是最为简单的单例类,这是一个描述饿汉式单例类的类图的实现。

技术分享

此类图中,此类已经将自己实例化。

源码为:

package singleton;

public class EagerSingleton {
	private static EagerSingleton instance=new EagerSingleton();
	/**
	 * 私有的默认构造子
	 * @return
	 */
	public EagerSingleton(){}
	/**
	 * 静态工厂方法
	 * @return
	 */
	public static EagerSingleton getInstance(){
		return instance;
	}
}
可以看出,在这个类被加载时,静态变量instance已经实例化,此时类的私有构造方法就会被调用,这时,

单例类的唯一实例对象就被创建出来。

在单例类中一个最重要的特点就是类的构造方法是私有的,因此,该类无法被继承。

懒汉式单例类:

与饿汉式单例类相同之处是类的构造方法是私有的,与饿汉式单例类不同的是,懒汉式单例类,在第一次被引用时将自己实例化,

如下图所示,uml类图中给出了一个典型的懒汉式单例类实现。

技术分享

懒汉式的源码为:

package singleton;

public class LazySingleton {
	private static LazySingleton instance=null;
	/**
	 * 私有的构造函数,保证外界无法实例化
	 */
	private LazySingleton(){}
	
	/**
	 * 静态工厂方法,返回此类的唯一实例
	 */
	public synchronized static LazySingleton getInstance(){
		if(instance==null){
			instance=new LazySingleton();
		}
		return instance;
	}
	
}

饿汉式单例类和懒汉式单例类,饿汉式单例类在自己被加载时就将自己实例化,即便加载器是静态的,

在饿汉式单例类被加载时仍会将自己实例化,单从资源利用效率角度来讲,这个比懒汉式单例类稍差些。

但从速度和反应时间角度来讲,则比懒汉式单例类稍好些,然而,懒汉式单例类在实例化时,必须要处理好

在多个线程同时首次引用此类时的访问限制问题,特别是当单例类作为资源控制器在实例化必然涉及资源初始化,

而资源初始化可能会很费时间,这意味着出现多线程同时引用此类的几率变得较大。

设计模式中饿汉式单例类和懒汉式单例类

标签:设计模式   singleton   

原文地址:http://blog.csdn.net/u012734441/article/details/44236221

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!