应用最广的模式-单例模式
应用场景
- 确保某个类有且只有一个对象的场景,避免产生多个对象消耗过多的资源,或者某种类型的对象只应该有且只有一个。
- 例如,创建一个对象需要消耗资源过多,如要访问IO和数据库等资源,这时候就要考虑使用单例模式。
- 单例模式广泛应用于线程池、缓存、日志对象等场景,这些应用场景基本都涉及到资源管理
关键点
- 构造函数不对外开放,一般为private;
- 通过一个静态方法或者枚举返回单例类对象;
- 确保单例类的对象有且只有一个,尤其是在多线程环境下
- 确保单例类对象在反序列化时不会重新构建对象
实现方式
包括:饿汉模式,懒汉模式,双重校验锁模式静态内部类,枚举等..
饿汉,静态内部类,枚举都是线程安全的。双重校验锁使用volatile
推荐实现方法:静态内部类
推荐词:内部类的方式保证了仅当单例类被调用时才实例化对象,同时也保证了线程安全;他利用classloader的机制来保证初始化instance时只有一个线程;当getInstance方法被调用时,内部类SingletonHolder才会被装载,从而实例化单例类。
public class Singleton {
//1.私有构造方法
private Singleton() {
}
//2.创建静态内部类
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
//3.创建实现方法
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
枚举单例
推荐词:写法简单,线程安全,反序列化也不会生成新的实例
public enum SingletonEnum {
INSTANCE;
public void showMessage(){
System.out.println("Hello World !!!");
}
}
总结
单例模式是运用频率很高的模式,但是,由于在客户端通常没有高并发情况,因此,选择哪种方式并不会有太大影响
Kotlin
这个相当于饿汉模式,基本一般开发要求都能满足了
object SingletonKt {
}
网友评论