设计模式笔记——Singleton

单例模式Singleton

 

构造函数定义为private的作用是阻止类在外部被实例化。

定义显式构造函数则默认的构造函数会失效。

 

保证一个类仅有一个实例,并提供一个访问它的全局访问点。(定义一个静态方法)

 

package singleton.pattern;

public class Singleton {

	private static Singleton instance;

	/**
	 * 私有化构造函数
	 */
	private Singleton() {

	}

	/**
	 * 单线程下的单例
	 * 
	 * @return
	 */
	public static Singleton GetInstance() {
		if (instance == null) {
			instance = new Singleton();
		}
		return instance;
	}

	/**
	 * 线程锁
	 */
	private static Object lock = new Object();
	
	/**
	 * 多线程单例,要加锁
	 * 
	 * @return
	 */
	public static Singleton GetInstance1() {
		synchronized (lock) {
			if (instance == null) {
				instance = new Singleton();
			}
			return instance;
		}
	}

	/**
	 * 多线程单例,双重锁定,避免了GetInstance1()方法中进入方法都判断加锁的弊端
	 * 
	 * @return
	 */
	public static Singleton GetInstance2() {
		if (instance == null) {
			synchronized (lock) {
				if (instance == null) {
					// 注意要再判断一次,防止一个线程执行完后释放
					// 了锁定又构造了一个实例
					instance = new Singleton();
				}
			}
		}
		return instance;
	}
	
	
	private final static Singleton instance1=new Singleton();
	/**
	 * 获取已经实例化的instance1
	 * @return
	 */
	public static Singleton GetInstance3(){
		return instance1;
	}
}


posted @ 2012-08-14 14:35  Leeforall  阅读(163)  评论(0)    收藏  举报