美文网首页
工厂模式

工厂模式

作者: 雨林QiQi | 来源:发表于2021-03-07 22:34 被阅读0次

    工厂模式是创建型模式,它的作用是创建对象。具体来说,常见的工厂模式包括简单工厂模式,工厂方法模式和抽象工厂模式三种。

    简单工厂模式(Simple Factory Pattern)

    image
    角色定义:
    工厂类

    工厂类通常包含一个静态方法(类方法),由该方法根据输入类型负责创建具体的产品(对象)。

    抽象产品基类(接口)

    它的作用是降低客户端和具体产品之间的耦合度。而且符合了开闭原则,以后需要加入新车型,客户端调用的代码也基本无需修改。

    具体产品类

    真正实现业务逻辑的子类。

    解决的问题:

    工厂模式的核心思想在于:

    • 通过引入工厂类,使对象的创建和使用分离了。这样的好处是它们可以独立的变化,易维护和扩展。
    • 客户端依赖抽象基类(接口),而不是具体的类,降低了耦合度。
    适用的场景:
    • 有一组相似的对象,需要集中统一创建时。
    • 创建对象的过程较为复杂时。
    • 对象很多,并且有扩展需求时。
    • 客户端不需要知道创建对象的过程时。
    • 客户端使用的对象存在变动的可能,或者根本不知道使用哪一个具体对象时。

    工厂方法模式(Factory Method Pattern)

    简单工厂方法有两个缺点:
    1.工厂类只有一个,且静态的工厂方法无法由子类继承,所以工厂的扩展受到限制。
    2.工厂方法里除了创建对象的代码,还有大量的判断逻辑(if-else)混在里面,方法会变得越来越臃肿。

    角色定义:
    抽象工厂类、具体工厂子类

    工厂方法模式在简单工厂模式的基础上演变为抽象出一个工厂父类,然后用不同的工厂子类来生成各自的产品。


    image

    该模式下产品和工厂的可扩展性都增强了,但是也随之而来的是可能会出现工厂类过多的问题。一般可以和简单工厂模式结合使用。

    抽象工厂模式(Abstract Factory Pattern)

    工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个抽象产品类。抽象工厂模式里每个工厂都会生产多种产品,但不同工厂生产的产品属于不同的系列。抽象工厂模式可以用来解决多产品族的问题。

    角色定义:
    产品族:

    产品族可以理解为产品系列。举个例子,现代简约风格的家具,包括桌子沙发茶几是一个产品系列;中式古典风格的桌子沙发茶几是另一个产品系列。抽象工厂模式就是用不同的工厂来生产不同系列下的一组产品。
    再举个该模式常被应用的例子:App修改主题(换肤)。App界面是由各种UI控件组成的,每个主题下同样的控件会有不同的样式。不同主题的工厂会生产各自样式的控件。变换主题时只要加载需要的主题工厂就可以了。


    image
    解决的问题:
    • 将一个系列的产品族统一到一起创建。
    • 容易改变产品的系列。
    适用的场景:

    需要创建一组对象,并需要切换不同的系列时。

    缺点:
    • 增加新的产品种类困难,它需要修改抽象工厂的接口。
    • 代码结构比较复杂。

    相关文章

      网友评论

          本文标题:工厂模式

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