当前位置: 首页 > news >正文

23种设计模式——工厂方法模式(Factory Method Pattern)详解

 ✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。
🍎个人主页:Meteors.的博客
💞当前专栏:设计模式
✨特色专栏:知识分享
🥭本文内容:23种设计模式——工厂方法模式(Factory Method Pattern)
📚 ** ps **  :阅读文章如果有问题或者疑惑,欢迎在评论区提问或指出。


目录

一. 背景

二. 定义

三. 结构组成

四.代码示例

1. 工厂类的创建

2. 工厂方法模式的使用

五. 优点

六. 缺点

七. 适用场景

八. 总结


一. 背景

工厂方法模式是一种比较常见并且简单的设计模式。相比较于简单工厂模式​(具体类别的实现放到Factory)相比,它​将对象的创建过程委托给子类工厂,使其符合了开闭原则。如果我们之后要创建几个有共性的对象,我们可以考虑使用工厂方法模式。

二. 定义

工厂方法模式​​是一种创建型设计模式,它在父类中提供了一个创建对象的接口(或抽象方法),但允许子类决定要实例化的具体类型。简单来说,就是将对象的实例化过程推迟到子类中进行。

​核心思想:​

  • 定义一个用于创建对象的接口,让子类决定实例化哪一个类
  • 工厂方法使一个类的实例化延迟到其子类

三. 结构组成

工厂方法模式主要包含以下角色:

  • Product(抽象产品) - 定义产品的接口
  • ConcreteProduct(具体产品) - 实现抽象产品接口的具体产品类
  • Creator(抽象工厂) - 声明工厂方法,返回Product类型对象
  • ConcreteCreator(具体工厂) - 重写工厂方法,返回具体产品实例

四.代码示例

1. 工厂类的创建

// 抽象产品
abstract class Product {public abstract void use();
}// 具体产品A
class ConcreteProductA extends Product {@Overridepublic void use() {System.out.println("Using Product A");}
}// 具体产品B
class ConcreteProductB extends Product {@Overridepublic void use() {System.out.println("Using Product B");}
}// 抽象工厂
abstract class Creator {// 工厂方法public abstract Product factoryMethod();// 业务方法public void someOperation() {Product product = factoryMethod();product.use();}
}// 具体工厂A
class ConcreteCreatorA extends Creator {@Overridepublic Product factoryMethod() {return new ConcreteProductA();}
}// 具体工厂B
class ConcreteCreatorB extends Creator {@Overridepublic Product factoryMethod() {return new ConcreteProductB();}
}

2. 工厂方法模式的使用

// 使用具体工厂A创建产品
Creator creatorA = new ConcreteCreatorA();
creatorA.someOperation(); // 输出: Using Product A// 使用具体工厂B创建产品
Creator creatorB = new ConcreteCreatorB();
creatorB.someOperation(); // 输出: Using Product B

五. 优点

  • 符合开闭原则 - 新增产品时无需修改现有代码
  • 符合单一职责原则 - 每个工厂类只负责创建特定产品
  • 良好的封装性 - 客户端不需要知道具体产品的创建细节
  • 良好的扩展性 - 增加新产品只需增加相应的工厂类

六. 缺点

  • 类数量增加 - 每增加一个产品类就需要增加一个对应的工厂类
  • 增加了系统的抽象性和复杂度

七. 适用场景

  • 当一个类不知道它所需要的对象的类时
  • 当一个类希望通过其子类来指定创建对象时
  • 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化时

八. 总结

工厂方法模式是面向对象设计中非常重要的创建型模式,它通过将对象的创建过程封装起来,使得系统在不修改具体类的情况下增加新的产品对象。这种模式在实际开发中应用广泛,特别是在需要创建多种相似产品对象的场景中。


文章转载自:

http://6C6QbeRE.yknsr.cn
http://YaO13Sms.yknsr.cn
http://idM0Xpc3.yknsr.cn
http://h6vNRpOo.yknsr.cn
http://56AYH2at.yknsr.cn
http://BSxwSAn2.yknsr.cn
http://YhXVkxUo.yknsr.cn
http://yJNcIjf5.yknsr.cn
http://MruZ6DpO.yknsr.cn
http://0SUGBqdy.yknsr.cn
http://jguoVRLv.yknsr.cn
http://k8sJ5Wsf.yknsr.cn
http://6ArO71yj.yknsr.cn
http://Sa2pCCTM.yknsr.cn
http://ZRDSh5ot.yknsr.cn
http://ZiLkS4L3.yknsr.cn
http://yUm4aMQW.yknsr.cn
http://5pAWfK9e.yknsr.cn
http://flhYDYUM.yknsr.cn
http://ASxwYR4o.yknsr.cn
http://2uWZaFEg.yknsr.cn
http://P3BNIfWN.yknsr.cn
http://77Qp6eS5.yknsr.cn
http://CBBrMosX.yknsr.cn
http://LAtYja0v.yknsr.cn
http://kh2hB50S.yknsr.cn
http://TJZMe35m.yknsr.cn
http://IP6fQZQP.yknsr.cn
http://O5h3Wx7r.yknsr.cn
http://kpogyWy4.yknsr.cn
http://www.dtcms.com/a/366951.html

相关文章:

  • C++ 学习与 CLion 使用:(七)if 逻辑判断和 switch 语句
  • docker中的mysql变更宿主机映射端口
  • Redis(43)Redis哨兵(Sentinel)是什么?
  • 【连载 7/9】大模型应用:大模型应用:(七)大模型使用工具(29页)【附全文阅读】
  • 从 GPT 到 LLaMA:解密 LLM 的核心架构——Decoder-Only 模型
  • 原型链和原型
  • 嵌入式学习 51单片机(3)
  • 详细学习计划
  • 深度解读《实施“人工智能+”行动的意见》:一场由场景、数据与价值链共同定义的产业升级
  • CLIP模型
  • 深度学习篇---SENet网络结构
  • JS初入门
  • 大数据开发计划表(实际版)
  • TypeScript 增强功能大纲 (相对于 ECMAScript)
  • LLAMAFACTORY:一键优化大型语言模型微调的利器
  • DeepSeek文献太多太杂?一招制胜:学术论文检索的“核心公式”与提问艺术
  • Android AI客户端开发(语音与大模型部署)面试题大全
  • hutool的EnumUtil工具类实践【持续更新】
  • 从基础到实践:Web核心概念与Nginx入门全解析
  • 深度学习:基于自定义 ResNet 的手写数字识别实践(MNIST 数据集)
  • Day35 网络协议与数据封装
  • Vue 3 学习路线指南
  • C语言基础:内存管理
  • 大模型应用开发框架 LangChain
  • Deeplizard深度学习课程(六)—— 结合Tensorboard进行结果分析
  • 小程序:12亿用户的入口,企业数字化的先锋军
  • 【C++题解】关联容器
  • 15,FreeRTOS计数型信号量操作
  • PMP新考纲练习题10道【附答案解析】
  • 开源技术助力企业腾飞,九识智能迈入‘数据驱动’新纪元