工厂模式

学习记录

工厂模式(Factory Pattern)属于创建型模式。在工厂模式中,创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

使用场景:

1. 日志记录:记录日志的方式可能有多种,这样客户端就可以通过工厂来选择不同的日志记录方式,来记录日志。

2. 数据库访问:用户通过工厂来选择数据库连接驱动。

我自己感觉,工厂就是一个字典,它知道从一堆东西里找到我们想要的东西。我们要东西的时候,就问工厂要,至于工厂是如何创建我们想要的东西的这个过程,我们不需要关心。

模式的结构与实现:

1. Factory:工厂,用来获取ProductA。

2. ProductA:需要创建的东西。

3. Client:客户端,实际要ProductA的人。

4. ProductA-1,ProductA-2,ProductA-3:具体创建的东西的不同种类。


工厂模式结构图

模式讲解:

1. Client和Factory沟通,Client问Factory要ProductA中的一种。

2. Factory根据一种逻辑选择ProductA-1,ProductA-2,ProductA-3中的一个,可以根据产品名来获取。

3. Factory创建完选择的ProductA中的某一种之后,返回给Client。

例子:


样例结构

创建订单后,需要将订单实例序列化保存到数据库。执行订单的时候,从数据库中获取订单记录,再反序列化生成订单,进而执行订单。这样将订单创建和订单执行的两个步骤解耦。序列化时,只是将订单中所有的任务名列表保存至数据库。反序列化时就需要通过任务名来生成任务,这里就可以用工厂模式来实现。

扩展:

工厂方法模式:

工厂模式有一个问题:类的创建依赖于工厂类。如果要拓展程序,那么必须修改工厂类。假如增加了产品种类ProductB,工厂类就需要修改。这时可以引入工厂方法模式,创建一个工厂接口和创建多个工厂实现类,这样一旦增加了产品种类,只要增加工厂类即可。


工厂方法模式结构图

抽象工厂模式

简单的说,就是把工厂也给抽象成一个抽象类。工厂下面有不用的工厂实现,每个工厂实现都可以创建不同的东西。


抽象工厂模式结构图

工厂方法模式与抽象工厂模式的比较


比较

参考:

https://www.runoob.com/design-pattern/abstract-factory-pattern.html

https://blog.csdn.net/auuea/article/details/84673570

https://blog.csdn.net/weixin_38853600/article/details/82586557

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。