news 2026/6/25 6:45:24

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
java设计模式 - 工厂方法模式

1.优缺点

优点:
  • 用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程。
  • 灵活性增强,对于新产品的创建,只需多写一个相应的工厂类。
  • 典型的解耦框架。高层模块只需要知道产品的抽象类,无须关心其他实现类,满足迪米特法则、依赖倒置原则和里氏替换原则。
缺点:
  • 类的个数容易过多,增加复杂度
  • 增加了系统的抽象性和理解难度
  • 抽象产品只能生产一种产品,此弊端可使用java设计模式 - 抽象工厂模式解决
应用场景:
  • 客户只知道创建产品的工厂名,而不知道具体的产品名。如 TCL 电视工厂、海信电视工厂等。
  • 创建对象的任务由多个具体子工厂中的某一个完成,而抽象工厂只提供创建产品的接口。
  • 客户不关心创建产品的细节,只关心产品的品牌

2.结构

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

  • 抽象工厂(Abstract Factory:提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法 newProduct() 来创建产品。
  • 具体工厂(ConcreteFactory:主要是实现抽象工厂中的抽象方法,完成具体产品的创建。
  • 抽象产品(Product:定义了产品的规范,描述了产品的主要特性和功能。
  • 具体产品(ConcreteProduct:实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应。
结构图.png

3.示例代码

public class AbstractFactoryTest { public static void main(String[] args) { try { Product a; AbstractFactory af; af = (AbstractFactory) ReadXML1.getObject(); a = af.newProduct(); a.show(); } catch (Exception e) { System.out.println(e.getMessage()); } } } //抽象产品:提供了产品的接口 interface Product { public void show(); } //具体产品1:实现抽象产品中的抽象方法 class ConcreteProduct1 implements Product { public void show() { System.out.println("具体产品1显示..."); } } //具体产品2:实现抽象产品中的抽象方法 class ConcreteProduct2 implements Product { public void show() { System.out.println("具体产品2显示..."); } } //抽象工厂:提供了厂品的生成方法 interface AbstractFactory { public Product newProduct(); } //具体工厂1:实现了厂品的生成方法 class ConcreteFactory1 implements AbstractFactory { public Product newProduct() { System.out.println("具体工厂1生成-->具体产品1..."); return new ConcreteProduct1(); } } //具体工厂2:实现了厂品的生成方法 class ConcreteFactory2 implements AbstractFactory { public Product newProduct() { System.out.println("具体工厂2生成-->具体产品2..."); return new ConcreteProduct2(); } }

4.参考

工厂方法模式

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


喜欢的朋友记得点赞、收藏、关注哦!!!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/25 16:08:31

TsubakiTranslator:3分钟搞定游戏翻译,日文游戏无障碍畅玩

TsubakiTranslator:3分钟搞定游戏翻译,日文游戏无障碍畅玩 【免费下载链接】TsubakiTranslator 一款Galgame文本翻译工具,支持Textractor/剪切板/OCR翻译 项目地址: https://gitcode.com/gh_mirrors/ts/TsubakiTranslator 还在为日文游…

作者头像 李华
网站建设 2026/6/24 5:00:00

ScienceDecrypting:突破学术资源访问壁垒的终极解决方案

ScienceDecrypting:突破学术资源访问壁垒的终极解决方案 【免费下载链接】ScienceDecrypting 项目地址: https://gitcode.com/gh_mirrors/sc/ScienceDecrypting 你是否曾因CAJ文献的访问期限而中断重要的研究?那些带有时间限制的加密PDF是否总在…

作者头像 李华
网站建设 2026/6/25 16:15:12

React图表集成终极指南:5大实战技巧告别数据可视化困境

React图表集成终极指南:5大实战技巧告别数据可视化困境 【免费下载链接】vue3-google-map A set of composable components for easy use of Google Maps in your Vue 3 projects. 项目地址: https://gitcode.com/gh_mirrors/vu/vue3-google-map 在当今数据驱…

作者头像 李华
网站建设 2026/6/25 3:36:26

如何快速找回丢失的压缩包密码:实用密码测试工具指南

忘记压缩包密码是很多用户都会遇到的困扰,特别是那些存放重要文件的加密压缩包。ArchivePasswordTestTool作为一款专业的密码测试工具,能够帮助您轻松解决这一难题,通过自动化测试快速找回丢失的密码。 【免费下载链接】ArchivePasswordTestT…

作者头像 李华
网站建设 2026/6/25 19:10:53

如何快速使用Onekey:Steam游戏清单下载完整指南

如何快速使用Onekey:Steam游戏清单下载完整指南 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 想要轻松管理Steam游戏清单却不知道从何入手?Onekey作为专业的Steam Depo…

作者头像 李华