工厂模式细分

工厂模式 ,是属于创建型设计模式。

通常是设计一个创建方法的接口, 然后不同的工厂实现这个方法来生成不同的对象。 调用者只要根据需求选择不同的子类来创建对象就可以了, 不用在写众多的if - else 判断逻辑了。

工厂模式细分

简单工厂模式

  • 生产的产品对象有很多种子类
  • 工厂类只有一个, 根据方法的入参来声场不同的对象

使用这种模式 需要你抽象提取出来不同的产品子类

工厂方法模式

  • 生产的产品对象有很多种子类
  • 工厂也有一个接口, 不同的产品工厂都实现这个工厂接口 , 这样不同的子工厂就可以生成不同的产品

同简单工厂方法的区别就是, 将差异性直接封装到工厂子类中而不是方法参数中, 解耦了不同的创建逻辑到不同的子类中, 这种差异对于复杂的方法创建逻辑适用。

这个模式不仅仅需要你抽象出来不同的产品子类, 同时还要你抽象出来不同的工厂子类

抽象工厂方法

  • 如果产品分多钟类型的, 并且多种类型可以组合, 假如汽车分为: 车胎, 车身,发动机等三个部件组成,
  • 并且每个部件又有自己的种类, 车胎就分为米其林、固特异、马牌轮胎等, 发动机也是一样多种类

如果一个工厂需要生产一种汽车, 那么这个工厂就要同时生产三种类型的部件。 当然你需要抽象出来这一个工厂接口来, 这个工厂接口要有三个生产方法。

比如大众汽车工厂类, 就必须实现三个各自互不影响的生产方法。

思考:
其实我如果来做汽车工厂的话, 我会先把汽车拆成三个部件独立的工厂, 如果生产汽车, 我会从三个工厂中去三个部件组装。 这是我遇到这个问题的第一思路。

我思路的问题可能在于:
汽车的三个部件 并不是完全独立的, 有可能会有联系, 比如 A车身只能配B发动机, 如果照我的思路, 这种联系的关系逻辑 我就要写在取组件组装的逻辑中, 这样逻辑分散,没有高内聚的特点 。
如果把三个部件的关联逻辑放入到抽象工厂中, 那么汽车的生产就完全对于调用方屏蔽了, 并且汽车的三个部件都在一个类中, 有一定的内聚性。

工厂模式的优点:

  1. 将不同的复杂创建逻辑都分配到不同子类中, 切分了代码, 松开了耦合
  2. 由于不同子类实现了同样的创建方法和返回抽象接口, 调用方不用关注具体实现, 也是解耦了

缺点:

  1. 可能会有很多的子类, 这个一般无法避免, 总比后期无法扩展强
  2. 不同的子类总有自己的独有逻辑,并且不兼容, 一个构造方法很难包含, 只能考虑使用可变参数或者集合参数。 具有一定的冗余性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值