什么是工厂模式?你以为工厂模式很简单( 三 )


就代码量而言 , 这种工厂方法模式比简单工厂方法模式更复杂 。不同的 () 类都有对应的工厂 。很多人会有以下疑问:
看起来工厂方法模式比简单工厂模式复杂多了?
工厂方法模式与自己创建对象没有区别吗?为什么要建更多的工厂?
让我们更深入地了解一下针对上述两个问题的工厂方法模式 。
为什么要使用工厂来创建对象?
创建封装对象的过程
在工厂方法模式中 , 工厂方法用于创建客户需要的产品 , 同时也向客户隐藏了将要实例化哪个特定产品类的细节 。用户只需要关心所需产品对应的工厂 , 而不需要在不知道具体产品类的类名的情况下创建 。
基于工厂角色和产品角色的多态设计是工厂方法模式的关键 。它使工厂可以独立决定创建什么样的产品对象 , 如何创建这个对象的细节完全封装在特定的工厂内部 。工厂方法模式也称为多态工厂模式 , 因为所有具体的工厂类都有相同的抽象父类 。
为什么每种类型的对象都应该有一个单独的工厂?
遵守“开闭原则”
主要目的是为了解耦 。向系统添加新产品时 , 不需要修改抽象工厂和抽象产品、客户端或其他具体工厂和具体产品提供的接口 , 只需要修改具体工厂和具体产品即可 。添加 。这样 , 系统的可扩展性就变得非常好 , 完全符合“开闭原则” 。
这些就是工厂方法模式的优点 。但是 , 工厂模式也有一些缺点:
工厂方法模式总结
工厂方法模式是对简单工厂模式的进一步抽象和概括 。
由于使用了面向对象的多态性 , 工厂方法模式保持了简单工厂模式的优点 , 克服了它的缺点 。
在工厂方法模式中 , 核心工厂类不再负责所有产品的创建 , 而是将具体的创建工作委托给子类 。这个核心类只负责给出具体工厂必须实现的接口 , 而不是被实例化的产品类的细节 , 这使得工厂方法模式允许系统在不修改工厂角色的情况下引入新产品 。
工厂方法模式的主要优点是在添加新的产品类时不需要修改现有系统 , 并且封装了产品对象的创建细节 , 系统具有很好的灵活性和可扩展性;工厂 , 这导致系统类的数量成对增加 , 在一定程度上增加了系统的复杂度 。
4 抽象工厂模式
抽象工厂模式():提供一个接口 , 用于创建一系列相关或相互依赖的对象 , 而无需指定它们的具体类 。抽象工厂模式 , 也称为 Kit 模式 , 是一种对象创建模式 。
抽象工厂模式提供了一种封装同一产品系列的各个工厂的方法 。在正常使用中 , 客户端程序需要创建抽象工厂的具体实现 , 然后将抽象工厂作为接口来创建这个主体的具体对象 。客户端程序不需要知道(或关心)它从这些内部工厂方法获得的对象的具体类型 , 因为客户端程序只使用这些对象的通用接口 。抽象工厂模式将一组对象的实现细节与它们的一般用途分开 。
产品系列
让我们了解一下什么是产品系列:位于不同产品层次结构中的功能相关产品系列 。如下例 , 有两个产品家族:跑车家族和商务车家族 。
关系图如下:

什么是工厂模式?你以为工厂模式很简单

文章插图
抽象工厂模式的使用
抽象工厂模式和工厂方法模式一样 , 都遵循开闭原则 。但不同的是 , 在工厂方法模式中添加特定产品时 , 必须添加相应的工厂 。但是抽象工厂模式只需要在添加一个类型的具体产品时添加一个工厂 。也就是说 , 工厂方法模式的工厂只能创建一个具体的产品 。抽象工厂模式的工厂可以创建属于一个类型的各种具体产品 。工厂创建的产品数量介于简单工厂模式和工厂方法模式之间 。