设计模式精讲
- 单例模式
定义:单例模式就是整个程序有且仅有一个实例。并且提供一个全局访问点场景。
- 懒汉模式:延迟加载,只有在真正使用的时候才开始实例化。
双重检验加锁优化,线程安全且在高并发场景下可以保持高性能,通过volatile关键字可以防止指令重排,防止使用尚未初始化的字段。
2.饿汉模式
类加载初始化的时候就完成了实例的初始化,比较常用但容易产生垃圾,本质上就是借助jvm的类加载机制,保证实例的唯一性(初始化过程只会加载一次)及线程安全,因为调用类的静态方法会导致类的初始化,就会导致对静态变量的初始化和执行静态代码块的工作。
3.静态内部类
1).本质上是利用类的加载机制来保证线程安全
2).只有在实际使用的时候,才会触发类的初始化,所以也是懒加载的一种形式。
3)目前比较推荐的一种方式
反射注入实例
预防反射注入方式:
4.枚举类型
天然不支持反射创建对应的实例,且有自己的反序列化机制
源码中的应用
// Spring & JDK
java.lang.Runtime
org.springframework.aop.framework.ProxyFactoryBean
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry
org.springframework.core.ReactiveAdapterRegistry// Tomcat
org.apache.catalina.webresources.TomcatURLStreamHandlerFactory// 反序列化指定数据源
java.util.Currency