策略模式
策略模式定义一个算法族,让算法的具体实现和调用者解耦。
应用
策略模式应用于以下的场合
- 许多类只有行为上的差别,通过策略来实现行为配置和复用
-
某个算法需要多个复杂度不同的实现
- 数据职责需要封装的情况
- 需要if-else来选择行为的情况
优点
- 可以借助继承来提取算法公共部分
- 替代子类型
- 消除条件判断
缺点
- 需要选择实现方式
- 调用者需要了解具体的策略
- 调用者和策略的调用开销
- 增加更多的类
简单工厂模式
可根据参数的不同返回类的不同实例。
优点
- 无需知道具体类的类名,只需要对应的参数
- 可以引入配置文件,在不修改客户端代码的情况下调整具体产品类
缺点
- 增加类的数量
- 每次添加新产品都要修改工厂,增大工厂的复杂性
- 工厂无法形成继承结构
工厂方法模式
核心的工厂类不再负责所有产品创建,由子类进行具体的创建工作。
应用
如日志记录器。
- 一个类不知道它所需要的对象的类
- 一个类通过其子类来知道创建哪个对象2
- 将创建对象的任务委托给多个工厂子类中的某一个
优点
- 用户不需要知道产品类名,只需要关系工厂
- 工厂可以自主确定如何创建何种产品对象
- 加入新产品时,只需添加具体工厂和具体产品
缺点
- 添加新产品时,需要成对添加具体产品和具体工厂,增加复杂度
- 增加抽象性和理解难度