单例模式demo
package com.test;
/**
 * 
 * @author Administrator
 *我的发现:调用这个的时候,不能直接实例化了;需要=null;然后get; 这样安全些;
 *然后仔细找了下单例模式的解释,发现是这样的;单例模式要线程安全,有单独且唯一的一个例子;
 *所以重新了构造方法,改成了安全的private,然后加了一个例子,setget方法(set方法干掉了、), 
 *这里是饿汉式单例模式,在类初始化的时候就新实例化了一个唯一的实例了;
 *
 *注: 单例模式有以下特点:
  1、单例类只能有一个实例。
  2、单例类必须自己创建自己的唯一实例。
  3、单例类必须给所有其他对象提供这一实例。
单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、登记式单例(略)。
 */
public class SingletonClass {
//饿汉式:
	/*
	private SingletonClass() {}
private static final SingletonClass instance = new SingletonClass();
	public static SingletonClass getInstance() {
		return instance;
	}
	*/
	//懒汉式:
	/*
	private SingletonClass() {}
private static SingletonClass instance = null;
	public static SingletonClass getInstance() {
		instance = new SingletonClass();
		return instance;
	}
	*/
	//懒汉式在getInstance方法上+同步:
	/*
	private SingletonClass() {}
private static SingletonClass instance = null;
	public static SingletonClass getInstance() {
		if(instance==null){
			instance = new SingletonClass();
		}
		return instance;
	}
	*/
	//懒汉式+双重检查锁定
	/*
	private SingletonClass() {}
private static SingletonClass instance = null;
	public static SingletonClass getInstance() {
		if(instance==null)
			synchronized (SingletonClass.class) {
				if(instance==null){
					instance = new SingletonClass();
				}
			}
		return instance;
	}
	*/
	//静态内部类
	//(既实现了线程安全,又避免了同步带来的性能影响)
	private static class LazyHolder {
		private static final SingletonClass INSTANCE = new SingletonClass();
	}
	private SingletonClass() {
	}
	public static final SingletonClass getInstance() {
		return LazyHolder.INSTANCE;
	}
	
}
 
                    
                     
                    
                 
                    
                 
                
            
         
         
 浙公网安备 33010602011771号
浙公网安备 33010602011771号