工厂模式汇总
工厂模式汇总
- 简单工厂,方法工厂,抽象工厂总结
- 工厂模式目的就是解耦
- 存在等级结构(抽象类),且产品之间有一定的联系,就可以使用抽象工厂。
- 如果不存在等级结构,或者是工厂生产的产品无联系,可以使用方法工厂。
- 简单工厂一般是知道了需要的产品是什么样子。
- 抽象工厂是方法工厂的高级模式。
各类模式关键点
- 简单工厂
- 场景
- 根据不同参数,返回不同类的实例。
- 就是常用的工厂函数
- 优点
- 使用者不需要知道实现细节,只需要相关的类就好
- 使用以及维护代码方便
- 缺点
- 对于工厂类,负担过重,如果有额外的逻辑,可能会导致工厂过于复杂。
- 违反“开闭原则”,一旦添加新产品就不得不修改逻辑
- 包含角色
- 工厂
- 抽象产品
- 具体产品
- uml图
- 场景
- 方法工厂
- 优点
- 更符合“开闭原则”,新产品,只需要新建工厂类以及产品类即可。
- 简单工厂是需要更改工厂逻辑
- 符合单一职责原则。每个工厂生产对应的产品
- 简单工厂工厂生成所有的产品
- 不使用静态工厂,可以形成基于继承的等级结构
- 简单工厂使用静态工厂
- 总的来说,方法工厂是简单工厂的扩展,让扩展更简单,继承可行。
- 更符合“开闭原则”,新产品,只需要新建工厂类以及产品类即可。
- 缺点
- 每增加一个产品,就要生成一个工厂,增加编译运行,项目代码复杂度
- 单一工厂只能生产一种产品
- 场景
- 不知道所需要的类是什么(简单工厂反之)
- 类通过子类创建对象
- 角色
- 抽象工厂
- 工厂
- 抽象产品
- 产品
- uml
- 优点
- 抽象工厂
- 优点
- 继承方法工厂的优点,解决方法工厂工厂只能生产单一产品的缺点
- 增加等级机构。并且对工厂产生的产品进行约束(产品簇)
- 缺点
- 产品簇的扩展比较复杂。如果新增一种产品,可能需要改动所有的工厂
- 场景
- 相关的产品存在一定的联系,存在一定的等级结构,就可以用抽象工厂。 (这里可以用方法工厂模式,因为工厂模式各个产品不存在等级结构,且不存在相关的联系)
- 角色
- 抽象工厂(可以生产多个产品)
- 具体工厂类
- 抽象产品
- 具体产品
- uml图
- 优点