创建型模式——工厂模式210922

本文深入探讨工厂方法模式,包括其应用场景、实现步骤及优缺点。通过对比new关键字直接实例化对象的方法,阐述了工厂方法模式如何提高代码灵活性,并介绍了简单工厂和静态工厂等变种形式。

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

Factory Method(工厂方法,Creational Pattern)

问题:"new"关键字的问题

  • 当我们使用new创建一个新的对象时,我们实际上初始化了一个实体类,而非使用一个接口
  • 此外当我们使用了一组相关的实体类时,我们会这样写在这里插入图片描述
  • 这样的代码在需要修改和扩展时不够灵活,需要重新修改它们
  • 我们希望使用接口使程序灵活在这里插入图片描述
  • 比如一个客户去了全聚德吃烤鸭,不能让他自己new一个烤鸭上来,而要让他自己有一个厨师接口,调用饭店里具体的厨师来上菜

Factory Method

  • 定义一个创建对象的接口,由实现接口的类来决定具体实例化哪个对象
  • 也叫做虚拟构造器Virtual Constructor

啥时用

  • 实体产品类不需要暴露给客户时
  • 创造者无法决定必须创造的具体产品
  • 创造者想要它的子类来指定它创造的产品
  • 创建者将创建实例的责任委托给几个子类

怎么用

在这里插入图片描述

  • Product是工厂创建的产品的接口
  • ConcreteProduct实现Product接口
  • Creator声明一个工厂方法,返回一个Product对象
  • ConcreteCreator重写工厂方法,返回ConcreteProduct的实例

优缺点

  • 优点:
    • 把所有new放在一个对象或方法里面,避免了代码里面的重复,而且提供了一个执行维护的地方
    • 客户端仅依赖于接口而不是具体类来实例化对象
  • 缺点:
    • 客户必须有一个创建者类的子类才能实例化一个具体的对象

实现细节

  • Creator可以是抽象的也可以是具体的,如果是具体的,应该实现一个默认的工厂方法
  • 工厂方法要有参数,工厂方法通过参数来实例化不同的对象在这里插入图片描述

变种

简单工厂

在这里插入图片描述

静态工厂

在这里插入图片描述

  • 这里的工厂方法是静态的,不必再实例化对象

实例:Spring中的BeanFactory,依赖注入

  • 理解依赖注入:本来我接受各种参数来构造一个对象,现在只接受一个参数——已经实例化的对象。
  • 可以参考:
    • https://www.qikegu.com/docs/1541
    • 如何用最简单的方式解释依赖注入?依赖注入是如何实现解耦的? - Angry Bugs的回答 - 知乎
      https://www.zhihu.com/question/32108444/answer/581948457
  • 依赖注入的三种方式
    • 构造器注入
    • setter注入
    • 接口注入
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值