李锋镝的博客

  • 首页
  • 时间轴
  • 说说
  • 每日心情
  • Now
  • 系列文章
  • AI工具集
  • 论坛
  • 左邻右舍
    • 左邻右舍
    • 朋友圈
    • 游客中心
  • 留言
    • 留言
    • 走心评论
  • 关于
    • 关于本站
    • 网站地图
    • 网站统计
    • 另一个网站
    • 赞助
  • 星球穿梭
  • 🚇开往
白雪成红
惟坚韧者始能遂其志
  1. 首页
  2. 后端
  3. 正文

JAVA设计模式-工厂方法模式

2020年2月3日 约 570 字2 分钟 179 0 0
合集:Java设计模式第 5 篇 / 共 8 篇
Java›Java设计模式
  1. 1Java设计模式:状态模式
  2. 2Java设计模式:策略模式
  3. 3Java设计模式:模板方法模式
  4. 4JAVA设计模式-抽象工厂模式
  5. 5JAVA设计模式-工厂方法模式当前
  6. 6Java设计模式-原型模式
  7. 7Java设计模式-单例模式
  8. 8设计模式总结

定义

工厂方法(FactoryMethod)模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。

我们把被创建的对象称为“产品”,把创建产品的对象称为“工厂”。如果要创建的产品不多,只要一个工厂类就可以完成,这种模式叫“简单工厂模式”,它不属于GoF的23种经典设计模式,它的缺点是增加新产品时会违背“开闭原则”。

“工厂方法模式”是对简单工厂模式的进一步抽象化,其好处是可以使系统在不修改原来代码的情况下引进新的产品,即满足开闭原则。

优缺点

优点

  1. 用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程;
  2. 在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改,满足开闭原则;

缺点

每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度。

实现

工厂方法模式由抽象工厂、具体工厂、抽象产品和具体产品等4个要素构成。

工厂方法模式的主要角色如下:

  1. 抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法 newProduct() 来创建产品。
  2. 具体工厂(ConcreteFactory):主要是实现抽象工厂中的抽象方法,完成具体产品的创建。
  3. 抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能。
  4. 具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应。
    JAVA设计模式-工厂方法模式
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
分享到

JAVA设计模式-工厂方法模式

也可使用浏览器菜单中的「分享」功能

微信扫一扫分享

标签: JAVA 工厂方法模式 设计模式
最后更新:2026年7月14日
相关文章
  • 使用Spring MVC的websocket配置时 Tomcat启动报错2020年2月25日
  • 架构师究竟比高级开发厉害在哪?2019年11月6日
  • Java SPI详解2021年4月16日
  • 解决IDEA2024UI卡顿问题2024年6月11日
  • Java数组类型2022年7月21日

李锋镝

既然选择了远方,便只顾风雨兼程。

打赏 点赞
< 合集上一篇
合集下一篇 >
1234567891112131415161718192021222324252627282930313233343536373839404142434446474849505152535455575859606162636465666769727476777879808182858687909293949596979899
取消回复
…

文章评论

还没有评论,快来抢沙发吧~

春宵一刻值千金,花有清香月有阴。
歌管楼台声细细,秋千院落夜沉沉。

听点儿音乐吧 朋友~
文章目录
最新 热点 随机
最新 热点 随机
Kratos-plus v1.1.26版本更新说明 我觉得是时候公布我的导航网站了 代码是 AI 写的,生产事故谁背锅? 给主题增加了游客中心功能 祝大家中秋安康 游本昌去世
给主题增加了游客中心功能游本昌去世关于主题加载速度优化的一点儿小演进我觉得是时候公布我的导航网站了给主题增加了Now、每日心情、年度回顾、岁月同一天、随机漫步等功能WordPress缓存插件WP Fastest Cache、WP Rocket 、FlyingPress对比
MapStruct深度解析:从原理到实战,告别BeanUtil的性能与安全痛点 Claude Code提示词优化指南:从"瞎写"到"高效生成",开发效率提升10倍的实战秘籍 深入解析 localhost 与 127.0.0.1:不止于“本地访问”的技术细节 SpringBoot整合Elasticsearch详细步骤以及代码示例(附源码) Spring Boot 2.x使用PostgreSQL数据库 在微服务中使用领域事件
最近评论
fairy 发布于 1 天前(10月02日) 很明显,只能处罚人,当然是人背锅。你能罚AI钱吗?能把AI辞退吗?很明显不能。
彬红茶 发布于 1 天前(10月02日) 很全面哦~国庆快乐
彬红茶 发布于 1 天前(10月01日) 确实可以加一下这个功能,我最近就改了,评论区加了个等级,游客中心实属无能为力 :78:
皮皮社长 发布于 2 天前(10月01日) 快看快看,我皮皮社长上榜了~ :2:
皮皮社长 发布于 2 天前(10月01日) 我直接把喜欢的网站放到友链中就好了,简单明了~ :40:
标签聚合
AI 多线程 Theme SpringBoot SQL JAVA Spring 数据库 架构 K8s Claude IDEA 日常 分布式 WordPress AI编程 MySQL ElasticSearch JVM Redis
友情链接
  • 搬砖日记
  • 若梦博客
  • 彬红茶日记
  • 林羽凡
  • 蜗牛工作室
  • 志文工作室
  • 韩小韩博客
  • 韩情脉脉
  • Honesty
  • 懋和道人
  • 知向前端
  • 老张博客
  • 临窗旋墨
  • sssr7844的博客
  • 瓦匠个人小站
  • 九仞之行
  • 哥斯拉
  • Serendipity
  • Mr.Sun的博客
  • 皮皮社

COPYRIGHT © 2016-2026 lifengdi.com. ALL RIGHTS RESERVED.

lifengdi.com

Domain age badge for lifengdi.com

Theme Kratos-plus By Dylan Li

津ICP备2024022503号-3

京公网安备11011502039375号