【设计模式-工厂模式】设计模式学习记录

什么是工厂模式

工厂模式是创造型模式的第二简单的,也非常好理解,就像工厂是生成统一制式商品的,工厂模式的目的是为了创造统一规整的实例。

工厂模式前-简单工厂

简单工厂不属于工厂模式,更像是一种设计思想,他是模仿造工厂的逻辑而诞生的。我更想叫它生产线模式。
在这里插入图片描述
举个例子:有一个包子铺,简单工厂就是一条包子生产线,通过调用getInstance方法就能拿到一个新包子,至于这个包子是什么馅的,就看getInstance方法做的判断了。
只要告诉工厂我要什么包子,就给你一个对应包子实例。

工厂模式-工厂方法

工厂方法模式是将工厂的生产线做了细化,我们不直接用工厂去创建不同实例,而是用不同的生产线创建对应实例。
在这里插入图片描述
依旧是那个包子铺,以前是一条生产线生成各种馅的包子,生产线坏了,所有包子都产不了了,这合理吗?
不合理!那就改,把每个馅的包子都用专用生产线生成,需要什么包子就到对应包子生产线上要一个包子实例。

工厂模式-抽象工厂

抽象工厂是加入了产品族的概念,将原来只抽象一个维度的思想再加一个维度。我感觉我这话都很抽象,没关系,我们先看类图。
在这里插入图片描述
如果这个看得乱可以参考我学习时老师的图
在这里插入图片描述
依旧用包子铺举例,在发展壮大后,包子铺新增了馅饼产品,和包子拥有同样的馅,那包子和馅饼,不同的内馅就是两个抽象维度了。我们调用包子工厂,创建一个韭菜鸡蛋的实例,也能调用馅饼工厂创建一个韭菜鸡蛋实例。他们在韭菜鸡蛋接口层是相同的,但却是不同的产品。

工厂模式的优劣

说的都饿了,最后就粘一下笔记吧

简单工厂优点和缺点

优点:

封装了创建对象的过程,可以通过参数直接获取对象。把对象的创建和业务逻辑层分开,这样以后就避免了修改客户代码,如果要实现新产品直接修改工厂类,而不需要在原代码中修改,这样就降低了客户代码修改的可能性,更加容易扩展。

缺点:

增加新产品时还是需要修改工厂类的代码,违背了“开闭原则”。

工厂方法优点和缺点

优点:

  • 用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程;
  • 在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改,满足开闭原则;

缺点:

  • 每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度。

什么时候使用工厂方法模式

  • 需要使用很多重复代码创建对象时,比如,DAO 层的数据对象、API 层的 VO 对象等。
  • 创建对象要访问外部信息或资源时,比如,读取数据库字段,获取访问授权 token 信息,配置文件等。
  • 创建需要统一管理生命周期的对象时,比如,会话信息、用户网页浏览轨迹对象等。
  • 创建池化对象时,比如,连接池对象、线程池对象、日志对象等。这些对象的特性是:有限、可重用,使用工厂方法模式可以有效节约资源。
  • 希望隐藏对象的真实类型时,比如,不希望使用者知道对象的真实构造函数参数等。

抽象工厂优点和缺点

优点

  1. 对于不同产品系列有比较多共性特征时,可以使用抽象工厂模式,有助于提升组件的复用性.

  2. 当需要提升代码的扩展性并降低维护成本时,把对象的创建和使用过程分开,能有效地将代码统一到一个级别上

  3. 解决跨平台带来的兼容性问题

缺点

增加新的产品等级结构麻烦,需要对原有结构进行较大的修改,甚至需要修改抽象层代码,这显然会带来较大不变,违背了开闭原则.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值