建造者模式
奖复杂对象的构建和表示分离,使得同样的构建过程可以创建不同的表示
应用
- 需要生成的产品对象有复杂的内部结构
- 需要生成的产品对象的属性相互依赖,需要指定生成顺序
- 对象的创建过程独立于创建该对象的类
- 隔离复杂对象的创建和使用
优点
- 可以奖产品本身和产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。
- 用户使用不同的具体建造者可以得到不同的产品对象
- 可以更加精细控制产品的创建过程
缺点
- 如果产品之间的差异性很大,则不适合使用建造者模式
- 如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化
状态模式
允许一个对象在状态改变的时候改变行为
应用
- 对象需要根据状态改变行为
- 代码中包含大量与状态相关的条件语句
优点
- 封装了转换规则
- 枚举了可能的状态,方便增加新的状态
- 允许状态逻辑和状态对象合成一体
- 可以共享状态对象
缺点
- 增加复杂性
- 对开闭原则支持不好