《大话设计模式》——工厂方法模式(Python版)

工厂方法模式:定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。

介绍

工厂方法模式,又称工厂模式多态工厂模式虚拟构造器模式,通过定义工厂父类负责定义创建对象的公共接口,而子类则负责生成具体的对象。

对比简单工厂模式

是对简单工厂模式的一个延伸,所以它们诞生的背景以及所解决的问题是大同小异。(不了解简单工厂模式的请看《大话设计模式》——简单工厂模式

简单工厂模式

简单来说,简单工厂模式是由一个工厂对象根据不同参数创建不同的实例。具体传什么参数,创建什么实例的逻辑是在工厂对象中完成的。

优点

  • 只需要传入一个正确的参数,就可以获取你所需要的对象而无需知道其创建细节。

缺点

  • 工厂一旦需要生产新产品就需要修改工厂类的方法逻辑,违背了开放—封闭原则
  • 如果产品实例种类很多,也导致了工厂内部逻辑复杂,不易维护。

工厂方法模式

工厂方法模式是对简单工厂模式进一步的解耦。将把原本会因为业务代码而庞大的简单工厂类,拆分成了一个个的工厂类,这样代码就不会都耦合在同一个类里了。

优点

  • 用户只需要关心所需产品的对应工厂,无需关心细节
  • 加入新产品符合开闭原则,提高可扩展性
  • 进一步降低了程序的耦合性

缺点

  • 类的个数容易过多,增加复杂度
  • 增加了系统的抽象性和理解难度

详细介绍

工厂方法模式的四个要素:

  • 抽象产品类(Product):提供抽象方法供具体产品类实现
  • 具体产品类(ConcreteProduct):提供具体的产品
  • 抽象工厂类(Factory):提供抽象方法供具体工厂实现
  • 具体工厂类(ConcreteFactory):提供具体的工厂

使用步骤:

  1. 创建抽象工厂类,定义具体工厂的公共接口;
  2. 创建抽象产品类 ,定义具体产品的公共接口;
  3. 创建具体产品类(继承抽象产品类) ,定义生产的具体产品;
  4. 创建具体工厂类(继承抽象工厂类),定义创建对应具体产品实例的方法;
  5. 外界通过调用具体工厂类的方法,从而创建不同具体产品类的实例
具体例子:

背景: 现公司监控系统报警需要对接企业微信公众号, 由于未认证企业微信推送消息的限制, 默认每天推送条数上限为6000条, 考虑到报警系统多, 规则没有收敛, 接收的人员多, 每天6000条可能不够用, 所以需要创建多个未认证的企业微信账号用于发送报警信息。

# 抽象工厂类
class WeChatFactory
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值