19.工厂模式能解决啥问题

本文详细介绍了工厂模式的三种类型:简单工厂、工厂方法和抽象工厂模式,强调了它们在封装对象创建过程中的作用。通过具体的例子展示了工厂模式如何在Spring框架中应用,以及在实际项目中提高代码解耦和灵活性。工厂模式常见于需要根据参数动态创建对象的业务场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.工厂模式能解决啥问题?

我们考虑这个问题的时候就说明我们其实已经了解了工厂模式,我们想要知道工厂模式的具体应用场景,并灵活的在工作中使用它来提供工作效率。

1.1 复习工厂模式

工厂模式具体分为:

  • 简单工厂:将创建一类对象的细节(new的过程)封装在一个类(工厂类)中,外界只需要通过这个工厂类根据特定的参数就能直接获取想要的对象。

  • 工厂方法模式:定义一个创建对象的接口,由其子类来决定要实例化的类是哪一个,工厂方法模式将实例化延迟到子类中。

  • 抽象工厂模式:提供一个接口,用于创建相关对象或依赖对象的家族,而不需要明确指定具体类。通过依赖注入来降低耦合。

下面我们来根据具体的UML图对这三个具体的工厂模式进行复习。

1.1.1 简单工厂模式

看不懂的同学请点击跳转 => 工厂模式
在这里插入图片描述

将创建一类对象的细节(new的过程)封装在一个类(工厂类)中,外界只需要通过这个工厂类根据特定的参数就能直接获取想要的对象。
下面我们根据这句话来解析上面的UML图中的信息,使其一一对应起来:
上面的UML中的工厂类是PizzaFacotory,在这个类里封装了对具体的CheesePizza,GreekPizza实体类的创建。
PizzaStore就是外界,在PizzaStore中,只需要根据特定的参数type调用PizzaFacotory的getPizza就能获得相应的对象,而无需进行new。

1.1.2 工厂方法模式

看不懂的同学请点击跳转 => 工厂模式
在这里插入图片描述

定义一个创建对象的接口,由其子类来决定要实例化的类是哪一个,工厂方法模式将实例化延迟到子类中。

其中PizzaFactory就是一个创建对象的接口,由NYPizzaFactory,ChicagoPizzaFactory,CaliforniaPizzaFactory这些继承PizzaFactory的子类来决定具体实例化那个实体类。

1.1.3 抽象工厂模式

看不懂的同学请点击跳转 => 抽象工厂模式

  • 提供一个接口用于创建相关依赖或依赖对象的家族,而不需要明确指定具体类。通过依赖注入来降低耦合。
    在这里插入图片描述

首先,将Pizza抽象化,并且建立一个PizzaFactory接口将具体的Pizza工厂和具体的Pizza解耦(通过依赖注入相关联),然后建立一个抽象PizzaStore将具体的Store和具体的Pizza解耦,和具体的PizzaFactory解耦。

1.2 我们在项目中哪里会用到工厂模式呢?

其实如果我们稍稍留意一下,就会发现当我们使用Spring的WebApplicationContext.getBean(beanName);根据bean名称获取实例的方式,用的就是工厂模式实现的。

在Spring项目中,工厂模式大致的运行思路是:
首先在系统初始化时实例化所有的Bean类,将其实例放到BeanFactory中或者将其new的方式放入Factory中,我们在编写代码时,不用去new某个Bean,而根据BeanName或Type调用BeanFactory就能得到具体类的实例化对象。
这样做就能将业务代码和具体的Bean解耦。
比如我们写一个通用查询接口,这个接口能通过入参中查询类型参数的取值不同而能查询到不同的数据。
我们可以先写出针对不同查询的查询组件,然后在配置文件中配置查询类型参数取值和具体的查询组件的映射关系,这样我们就可以完成业务代码和Bean的解耦,查询接口具体执行那种查询是根据配置的映射关系到对象工厂中获取对象执行,然后将结果返回。
在这里插入图片描述

所以工厂模式的应用场景有: 在某种业务场景下,我们只需要在一类对象中获取一个对象进行使用时,我们可以使用工厂模式将创建的过程聚合在某个地方方便管理。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小牧之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值