设计模式--单例模式

设计模式–单例模式

  • 定义: 确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。

  • 应用场景:

    需要频繁创建的一些类,使用单例可以降低系统的内存压力,减少GC

    某些类创建实例时占用资源较多,或实例化耗时较长,且经常使用。

    频繁访问数据库或文件的对象

  • 要点:

    私有化构造器

    保证线程安全

    延迟加载

    防止序列化和反序列化破坏

    防御反射攻击

饿汉式
// 容器启动时创建,私有化构造方法,提供全局访问点getInstance,
public class HungrySingleton {
	// 容器启动时创建
	private static HungrySingleton instance = new HungrySingleton();

	// 私有化构造方法
	private HungrySingleton() {}

	// 全局访问点
	public HungrySingleton getInstance() {
		return instance;
	}

}	
懒汉式-双重检查锁+volatile
public class LazySingleton {
	// 懒加载, volatile防止指令重排序
	private static volatile LazySingleton instance;

	// 私有化构造方法
	private LazySingleton() {	}

	public LazySingleton getInstance() {
		if (instance != null) {
			synchronized(instance) {
				if (instance != null) {
					instance = new LazySingleton();
				}
			}
		}
		return instance;
	}
	
}
内部类
// 利用了类加载的机制
public class InnerClassSingleton {

	// 内部类
	private class InnerClassSingletonHolder {
		private static InnerClassSingleton instance = new InnerClassSingleton();
	}
	
	// 私有化构造方法
	public InnerClassSingleton() {}
	
	// 全局访问点
	public InnerClassSingleton getInstance() {
		return InnerClassSingletonHolder.instance;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值