简述三大工厂模式

  1. 简单工厂模式 (Simple Factory Pattern)
    由一个工厂对象来决定创建具体的产品实例,简单工厂模式并不属于 GoF 23 种设计模式之一,但是我们在平常开发中也运用的非常广泛

    简单工厂模式适用场景
    简单工厂适用于工厂类负责创建的对象较少的场景,且客户端只需要传入工厂类的参数,对于如何创建对象的逻辑不需要关心。

    简单工厂模式存在的问题
    假如每种产品创建不仅仅只是实例化一个对象,还有其它逻辑需要处理,那么我们无法直接使用一句反射语句来创建对象,所以还是避免不了要写很多 if 或者 switch 循环分支。这样每新增一个产品我们都需要修改简单工厂类,违背了开闭原则,而且随着产品越来越丰富,工厂的职责会变得越来越多,久而久之会越来越难以维护。


  1. 工厂方法模式 (Fatory Method Pattern)
    定义一个创建对象的接口,然后创建不同的具体工厂来创建对应的产品。工厂方法让类的实例化推迟到工厂子类中进行,在工厂方法模式中用户只需要关心所需产品对应的工厂,无须关心创建细节。

    工厂方法模式中假如需要新增产品,只需要再新建工厂实现类,无需修改源码,符合开闭原则。

    工厂方法模式的适用场景

  • 创建对象需要大量重复的代码。

  • 客户端(应用层)不依赖于产品类实例如何被创建、实现等细节。

  • 一个类通过其子类来指定创建哪个对象。

    工厂方法模式的缺点
    工厂方法模式的缺点也是很明显的,每新增一个产品就需要新增两个类,一旦产品数量上来了,类的个数也会过多,就会增加了系统的复杂度,也使得系统更加抽象难以理解。


  1. 抽象工厂模式

    提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。客户端(应用层)不依赖于产品类实例如何被创建、实现等细节。

    抽象工厂模式强调的是一系列相关的产品对象(属于同一产品族)一起使用创建对象时需要大量重复的代码。此时我们就需要提供一个产品类的库,使得所有的产品以同样的接口出现,这样客户端就可以不依赖于具体实现。

    什么是产品族

    在学习抽象工厂模式之前,我们需要先了解一下什么叫产品族。产品族指的就是相似的产品,比如说我们常用的手机,有华为、小米、OPPO,这些不同品牌的手机就属于同一个产品族,它们隶属于不同的公司,也就是需要由不同的工厂进行生产,这些工厂都可以共用同一个抽象方法来生产手机,这就是抽象工厂模式的本质,将相似的产品(同一产品族)抽象出公共的方法,统一对外接口。

    抽象工厂模式的适用场景

    抽象工厂模式适用于我们有一系列类似的产品(比如华为手机和小米手机),然后这些产品的实现又有细节上的不同,那么这时候就可以利用抽象工厂模式来将产品进行抽象化。

    抽象工厂模式的缺点

    结合设计模式七大原则,其实我们可以发现抽象工厂有一个很大的缺点,那就是扩展产品相当困难,比如示例中现在小米想造汽车,那么我们需要修改工厂的源码,新增造汽车的方法,这样的话抽象工厂、具体工厂都需要修改,显然违背了开闭原则。所以抽象工厂模式使用的前提必须是产品比较稳定,不会轻易作出修改,否则后期的维护将会非常困难。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值