`

Java中单例模式(Singleton)笔记__自用

    博客分类:
  • Java
阅读更多


注意三种单例模式的实现互相独立。因为偷懒把他们写在同一个类里了。

package HomeWork110306;

/**
 * 单例模式:保证一个java的类只有一个实例
 *   可以通过将构造方法声明成私有的,在类内部创建实例
 *   对外提供一个公用方法来获取这个实例
 *   饱汉模式:一般认为饱汉模式安全。每次申请一次内存,宁撑死不挨饿
 *   饥汉模式:注意饥汉模式下的公用方法必须是线程同步的,原因????
 *   其他模式:定义一个类,构造方法为private,所有方法为static的
 * @author wybin
 */
public class Singleton {
	/**1.饱汉模式
	 * 每次都要生成一次对象,所以饱了。这样总的类对象不是多个了吗?
	 * 是指每次调用这个类时都要new一次吗?可是内存不是只有一份吗?
	 */
	private Singleton(){//构造方法是私有的		
	}
	//实例化代码放在静态代码块里可以提高程序执行效率,但可能更占空间
	private final static Singleton instance = new Singleton();
	//提供公用方法,用于获取类内部的类实例
	public static Singleton getInstance(){
		return instance;
	}
	
	
	/**2.饥汉模式,注意其getInstance方法是synchronized的
	 * 使用getInstance判断,当实例为空时才生成
	 * 不用每次生成对象,第一次使用生成实例
	 * 即刚开始类实例对象为null,还未申请内存。在getInstance里针对类实例进行判断
	 * 为空,即饥饿状态,需要创建后返回,否则直接返回
	 * @author wybin
	 */
	private Singleton(){
	}
	private static instance = null;//先声明一个类本身实例成员。初始化为空。先不申请内存
	public static synchronized Singleton getInstance(){
		if(instance == null) instance = new Singleton();
		return instance;
	}
	
	/**3.其他模式(自己猜的)
	 * 构造方法为private
	 * 其他方法全部为static
	 */
	private Singleton(){
	}
	private static instance = null;
	private static Singleton getInstance(){
		if(instance == null) instance = new Singleton();
		return instance;	  
	}
	
}


分享到:
评论
1 楼 随意而生 2015-03-22  
我知道一个是用lock加锁,在加锁前后都判断一次是否已经创建了实例。这样比起楼主的同步方法,效率应该更好了吧

相关推荐

Global site tag (gtag.js) - Google Analytics