设计模式-创建型--工厂模式

什么时候使用工厂模式?

相比于直接使用new来创建对象,工厂模式有哪些好处?

 

工厂模式分为三种更加细分的类型:简单工厂模式、工厂方法模式以及抽象工厂模式。也有的书籍把简单工厂模式划分为工厂方法模式的一种特列,所以这种划分方式,工厂模式只有两种,分别是工厂方法模式和抽象工厂模式。

 

什么时候使用工厂模式?

当创建逻辑比较复杂,是一个“大工程”的时候,就可以考虑使用工厂模式,封装对象的创建过程,将对象有创建和使用过程分离。如下面两种情况:
1)、代码中存在if-else分支判断,动态地根据不同类型创建不同的对象。针对这种情况,我们就可以考虑使用工厂模式,将这一坨if-else创建对象的代码抽离出来,放到一个类中

2)、尽管不需要根据不同类型创建不同的对象,但单个对象本身创建过于复杂,例如创建对象的时候需要组合其他类对象进行初始化操作,再这种情况下,我们也可以考虑使用工厂模式,将对象的创建过程封装到工厂类中。

对于第一种情况,如果单个类的创建过程比较简单,就可以使用简单工厂模式。如果每个类的创建过程都比较复杂,为了避免设计出一个过于庞大的简单工厂类,就推荐使用工厂方法模式。

对于第二种情况,则使用工厂方法模式,如果第二种情况中,创建过程简单,就没必要使用工厂模式进行创建过程的封装。

 

我们上升一个思维层面,从设计思想以及设计原则来看,有以下几点,这也是判断要不要使用工厂模式的最本质的判断标准:

1)、封装变化:创建逻辑有可能变化,封装成工厂类之后,创建逻辑的变更对调用者透明。

2)、代码复用:创建代码抽离到独立的工厂之后可以复用

3)、隔离复杂度:封装复杂的创建逻辑,调用者无需了解如何创建对象

4)、控制复杂度:将创建代码抽离出来,让原本的函数或者类的职责更加单一,代码简洁。

 

工厂方法模式和抽象工厂模式的区别;

最大的区别就是:工厂方法模式是提供一个抽象接口来创建一个产品。而抽象工厂是提供一个抽象接口来创建一个产品家族,也就是多个“产品”。所以,抽象工厂的实现方式一般是以工厂方法的方式实现生成方法的。

 

代码实现案列可以参考《Head First设计模式》,这里就不再介绍了。本篇的重点是工厂模式的使用场景。

参考:《Head First设计模式》

            设计模式之美--王争

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值