设计模式

Published: by

1 单例模式

某个类只能生成一个实例,该实例全局访问,例如Spring容器里一级缓存里的单例池。

1.1 优点

  • 唯一访问:如生成唯一序列化的场景、或者spring默认的bean类型。
  • 提高性能:频繁实例化创建销毁或者耗时耗资源的场景,如连接池、线程池。

1.2 缺点

  • 不适合有状态且需变更的

1.3 实现方式

  • 饿汉式:线程安全速度快
  • 懒汉式:双重检测锁,第一次减少锁的开销、第二次防止重复、volatile防止重排序导致实例化未完成
  • 静态内部类:线程安全利用率高
  • 枚举:effictiveJAVA推荐,反射也无法破坏

2 工厂模式

定义一个用于创建产品的接口,由子类决定生产何种产品。

2.1 优点

  • 解耦:提供参数即可获取产品,通过配置文件可以不修改代码增加具体产品。

2.1 缺点

  • 每增加一个产品就得新增一个产品类

3 抽象工厂模式

提供一个接口,用于创建相关或者依赖对象的家族,并由此进行约束。

3.1 优点

  • 可以在类的内部对产品族进行约束

3.2 缺点

  • 假如产品族中需要增加一个新的产品,则几乎所有的工厂类都需要进行修改。