设计模式
1 单例模式
某个类只能生成一个实例,该实例全局访问,例如Spring容器里一级缓存里的单例池。
1.1 优点
- 唯一访问:如生成唯一序列化的场景、或者spring默认的bean类型。
- 提高性能:频繁实例化创建销毁或者耗时耗资源的场景,如连接池、线程池。
1.2 缺点
- 不适合有状态且需变更的
1.3 实现方式
- 饿汉式:线程安全速度快
- 懒汉式:双重检测锁,第一次减少锁的开销、第二次防止重复、volatile防止重排序导致实例化未完成
- 静态内部类:线程安全利用率高
- 枚举:effictiveJAVA推荐,反射也无法破坏
2 工厂模式
定义一个用于创建产品的接口,由子类决定生产何种产品。
2.1 优点
- 解耦:提供参数即可获取产品,通过配置文件可以不修改代码增加具体产品。
2.1 缺点
- 每增加一个产品就得新增一个产品类
3 抽象工厂模式
提供一个接口,用于创建相关或者依赖对象的家族,并由此进行约束。
3.1 优点
- 可以在类的内部对产品族进行约束
3.2 缺点
- 假如产品族中需要增加一个新的产品,则几乎所有的工厂类都需要进行修改。