第一章:Java设计模式-单例模式

一、单例模式-饿汉模式

package com.xm.designpattern.single;

/**
 * 单例模式-饿汉模式
 * 原理: 不管是否使用,类加载时就初始化好
 * 缺点: 非线程安全,只适合单线程使用
 * @author ouyangjun
 *
 */
public class HungrySingle {

	private HungrySingle hungrySingle = new HungrySingle();
	
	public HungrySingle getInstance(){
		return hungrySingle;
	}
	
}

二、单例模式-懒汉模式

package com.xm.designpattern.single;

/**
 * 单例模式-懒汉模式
 * @author ouyangjun
 */
public class LazySingle {
	
	/**
	 * 原理: 在需要用到实例的时候才去创建
	 * 缺点: 非线程安全,只适合单线程使用
	 * @return
	 */
	private LazySingle lazySingle = null;
	
	public LazySingle getInstance(){
		if(lazySingle==null){
			lazySingle = new LazySingle();
		}
		return lazySingle;
	}
	
	
	/**
	 * 原理: 在需要用到实例的时候才去创建
	 * 缺点: 线程安全,可多线程使用,但比较消耗性能,因为不是所有情况都需要同步
	 * @return
	 */
	private LazySingle lazySingleSafe = null;
	
	public synchronized LazySingle getInstanceSafe(){
		if(lazySingleSafe==null){
			lazySingleSafe = new LazySingle();
		}
		return lazySingleSafe;
	}
	
}

三、单例模式-懒汉模式,双重安全校验

package com.xm.designpattern.single;

/**
 * 单例模式-懒汉模式,双重安全校验
 * 原理: 当实例为空的时候,先锁定,再创建实例,再放开锁,原理上是没问题的,可使用
 * 缺点: 多重校验,容易出错
 * @author ouyangjun
 */
public class DoubleLazySingle {
	
	private DoubleLazySingle doubleLazySingle = null;
	
	public DoubleLazySingle getInstance(){
		if(doubleLazySingle==null){
			synchronized(DoubleLazySingle.class){
				if(doubleLazySingle==null){
					doubleLazySingle = new DoubleLazySingle();
				}
			}
		}
		return doubleLazySingle;
	}
	
}

四、单例模式-内部类实现(推荐使用)

package com.xm.designpattern.single;

/**
 * 单例模式-内部类实现
 * 原理: 单列初始化不会加载,在调用getInstance()方法时才进行加载,推荐使用
 * @author ouyangjun
 */
public class InternalClassSingle {

	private static class InternalClassSingleHolder {
		private static InternalClassSingle internalClassSingle = new InternalClassSingle();
	}
	
	public InternalClassSingle getInstance() {
		return InternalClassSingleHolder.internalClassSingle;
	}
	
}

本章完结,待续!

本文说明:该文章属于原创,如需转载,请标明文章转载来源

猜你喜欢

转载自blog.csdn.net/p812438109/article/details/81637373