23种设计模式之单例模式

常见的物种单例模式实现方式:
——主要:
饿汉式(线程安全,调用效率高,但是,不能延迟加载)
懒汉式(线程安全,调用效率不高,但是,可以延迟加载)
——其他
双重检测锁式(由于JVM底层内部模式原因,偶尔会出现问题,不建议使用)
静态内部类式(线程安全,调用效率高,但是,可以延时加载)
枚举式(线程安全,调用效率高,不能延迟加载)
如何选用?
——单例对象占用资源少,不需要延时加载
枚举式好于饿汉式
——单例对象占用资源大,需要延时加载
静态内部类好于懒汉式

/**
 * 单例模式 饿汉式
 * @author 万河归海
 *
 */
public class Singpattern01 {
	//类初始化时,立即加载到这个对象(没有延时加载的优势),加载类是,线程是安全的
	private static Singpattern01 instance = new Singpattern01();
	private Singpattern01(){//构造方法私有化
		
	}
	//方法没有同步,调用效率高!
	public static Singpattern01 getSingpattern01(){
		return instance;
	}
}
/**
 * 单例模式懒汉式
 * @author 万河归海
 *
 */
public class Singpattern02 {
	//类初始化时,不初始化这个对象(有延时加载的优势)
	private static Singpattern02 instance;
	private Singpattern02(){
		
	}
	//方法同步,调用效率低
	public static synchronized Singpattern02 getSingpattern02(){
		if(instance==null){
			instance = new Singpattern02();
		}
		return instance;
	}
}

public class Singpattern03 {
	/**
	 * 单例模式 内部类实现方式
	 * @author 万河归海
	 *要点: 外部类没有static属性,则不会像饿汉式那样立即加载对象。
	 *		只有真正调用getInstance(),才会加载静态内部类。加载类时时线程安全的。
	 *		instance是static final类型,保证了内存中只有一个实例存在,而且只能被赋值一次
	 *		从而保证了线程安全
	 *		兼备了并发高效调用和延迟加载的优势
	 */
	private static class SingletonIntance{
		private static final Singpattern03 instance = new Singpattern03();
	}
	public static Singpattern03 getInstance(){
		return SingletonIntance.instance;
	}
	private Singpattern03(){
		
	}
}

/**
 * 使用枚举实现单例模式
 * @author 万河归海
 *	优点:实现简单
 *		枚举本身就是单例模式。由JVM从根本上提供保障!避免反射和反序列化的漏洞!
 *  缺点:无延迟加载
 */
public enum Singpanttern04 {
	//这个枚举元素,本身就是单例对象!
	INSTANCE;
	
	//可以添加自己需要的操作!
	public void singletonOperation(){
		
	}
}

由于双重检测锁式的局限性,再次就不书写其代码了,如想了解,请自行度娘即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值