javaSE基础-单例设计模式

单例模式:一个类在内存中只有一个对象
思想:1、保证对象唯一,避免建立多个对象,禁止其他程序创建该类对象
2、为了可以让其他程序访问到该类,在本类自定义一个对象
3、给其他程序提供访问方式
实现:1、将构造函数私有化
2、在类中创建一个本类对象
3、提供一个方法可以获取该对象
特有参数这个单例模式才有意义

//实际开发推荐 饿汉式
/**
* 饿汉式,single类一进内存就已创建好对象
* 记忆点:管他饿不饿,先创建再说
*/
class Single{
	//特有参数
	private string para;
	get/set();
	//私有化构造方法
	private Single(){}
	//私有的创建对象方法
	private static Single single = new Single();
	//给外部提供调用方法
	public static Single getInstance(){
		return single;
	}
}
/**
* 懒汉式,single类进内存还没有创建对象,只有调用了getInstance()方法才创建对象
* 记忆点:创建对象时先问一下 饿不? true 创建 false 直接返回
*/
class Single{
	//特有参数
	private string para;
	get/set();
	//私有化构造方法
	private Single(){}
	//私有的创建对象方法
	private static Single single = null;
	//给外部提供调用方法
	/**
	* TODO此处存在问题:如果两个调用同时(a进程挂起时,b进程进来)进来就会造成对象不唯一
	*/
	/*解决方案1:方法加synchronized关键字 
				缺点:效率比较低,进来就判断*/
	p1:public static synchronized Single getInstance(){
			if(null != single)
				single = new Single();
			return single;
		}
	/*解决方案2:先判断是否存在对象,不存在 则先给single类加锁,再创建对象,如果存在两个进程同时进来,则二次判断就保证唯一 
				缺点:代码量增加*/
	p2:public static Single getInstance(){
			if(null != single){
				synchronized(Single.class){
					if(null != single)
						single = new Single();
				}	
			}
		}
}

class SingleDemo{
	public static void main(String[] args){
		Single single = Single.getInstance();
	}
}

你可能感兴趣的:(javaSE)