美文网首页
辨析简单工厂,工厂方法和抽象工厂

辨析简单工厂,工厂方法和抽象工厂

作者: pepsi1000 | 来源:发表于2019-08-07 17:26 被阅读0次

1. 简单工厂

只是一种编码风格,不属于设计模式。查看wikipedia解释

由一个工厂对象负责创建具体的产品,将客户端与产品解耦合。

缺点:拓展性差。增加新产品时,无法形成继承的等级结构,需要通过修改工厂类的判断逻辑,违背了开闭原则,而工厂方法解决了简单工厂对于同一等级的产品拓展性差的缺点。

适用场景:简单工厂的缺点决定了其只适用于创建的产品对象比较少的情况下。

源码案例

  • calendar#getInstance#createGalendar 值得注意的是,这是个静态方法,也就是说这个方法并不考虑产品的拓展性,因此使用简单工厂最恰当。

2. 工厂方法

将创建产品的职能延迟到子类。解决了简单工厂拓展性差的问题。

理解产品等级和产品族。(产品族是抽象工厂中的概念)

解决同一产品等级的业务抽象问题。

源码案例

  • collection#iterator TODO iterator UML配图。

其它

什么时候选择使用抽象类而不是接口?

某些属性,行为是已知的情况下,使用抽象类更合适。

3. 抽象工厂

产品等级和产品族,举例说明:

  • 美的空调,格力空调,海尔空调属于同一产品等级。

  • 美的空调,美的电冰箱,美的电视属于同一产品族。

工厂方法和抽象工厂差别在于关注点不同。工厂方法关注同一产品等级拓展差的问题,而抽象工厂关注同一产品族拓展性的问题。

让我们继续从拓展产品等级和拓展产品族这两个维度切入分析:

拓展产品等级:

  • 工厂方法:新增产品实现类、产品工厂实现类,符合开闭原则。

  • 抽象工厂:需要修改抽象工厂接口,违反开闭原则。

拓展产品族:(增加同族产品)

  • 工厂方法:新增产品工厂违反高内聚低耦合,修改原来产品工厂违反开闭原则。

  • 抽象工厂:新增产品工厂实现、新增产品1、新增产品2等,符合开闭原则。(注意:产品1和产品2属于不同的产品类型)

源码案例

  • connection 抽象工厂,mysql的connectionimpl属于抽象工厂的具体实现。

  • sqlsessionfactory 其中sqlsession和configuration属于同一产品族,defaultsqlsessionfactory就是其中一个抽象工厂的具体实现。

4. 总结

简单工厂,工厂方法和抽象工厂的最大区别在于关注点不同:

  • 简单工厂关注将客户端与产品解耦合。

  • 工厂方法关注产品等级的拓展性。

  • 抽象工厂关注产品族的拓展性。

相关文章

  • 辨析简单工厂,工厂方法和抽象工厂

    1. 简单工厂 只是一种编码风格,不属于设计模式。查看wikipedia解释 由一个工厂对象负责创建具体的产品,将...

  • 设计模式(3) 抽象工厂模式

    抽象工厂模式 优化抽象工厂 异步工厂 在学习抽象工厂模式前,先来回顾一下前面的简单工厂和工厂方法模式。简单工厂的职...

  • 工厂方法(Factory Method)

    工厂方法 一般情况下,工厂模式分为:简单工厂、工厂方法和抽象工厂。 简单工厂模式(Simple Factory) ...

  • 工厂模式(工厂方法模式和抽象工厂模式)

    1.简单工厂: 简单工厂不属于23种设计模式的一种,他是工厂方法和抽象工厂的基础,工厂方法和抽象是简单工厂的演进。...

  • 工厂模式

    简单工厂 —— 工厂方法 —— 抽象工厂 简单工厂: 静态(工厂方法) : 创建一个对象。工厂方法: 动态: 基于...

  • 2021-11-16 - 学习记录

    设计模式学习:创建型:工厂(工厂方法,抽象工厂),建造者,单例,原型 设计模式:工厂模式 简单工厂 工厂方法 抽象工厂

  • 第一章2.0工厂- 基础类准备

    2.1工厂-简单工厂模式2.2工厂-工厂方法模式2.3工厂-抽象工厂模式

  • 设计模式-3种工厂模式

    工厂模式包括:简单工厂模式,工厂方法模式,抽象工厂模式 简单工厂模式 工厂方法根据参数直接创建实例:工厂->产品 ...

  • 设计模式2-工厂模式

    工厂模式分为简单工厂模式、工厂方法模式和抽象工厂模式 简单工厂模式 简单工厂模式,就是建立一个工厂类,对实现了同一...

  • 工厂模式

    工厂模式包含三种模式:简单工厂模式、工厂方法模式和抽象工厂模式。 简单工厂模式 定义简单工厂模式:由一个工厂类根据...

网友评论

      本文标题:辨析简单工厂,工厂方法和抽象工厂

      本文链接:https://www.haomeiwen.com/subject/hfjadctx.html