news 2026/4/16 11:10:20

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/4/9 13:08:19

Windows系统苹果设备连接终极解决方案:一键驱动安装完全指南

Windows用户在使用苹果设备时经常会遇到各种连接问题,从USB网络共享无法启用到设备识别异常,这些困扰让跨平台数据传输变得异常困难。本文将为您揭示一个简单高效的解决方案,彻底告别苹果设备连接烦恼。 【免费下载链接】Apple-Mobile-Driver…

作者头像 李华
网站建设 2026/4/9 13:13:26

Zenodo科研数据管理:从数据混乱到永久存档的终极解决方案

Zenodo科研数据管理:从数据混乱到永久存档的终极解决方案 【免费下载链接】zenodo Research. Shared. 项目地址: https://gitcode.com/gh_mirrors/ze/zenodo 还在为科研数据管理而头疼吗?实验数据散落在不同设备,论文材料版本混乱&…

作者头像 李华
网站建设 2026/4/10 18:51:48

图解I2C总线应答机制:新手易懂版

图解I2C应答机制:从零理解主从如何“对话”你有没有遇到过这样的情况——代码写得没问题,接线也检查了三遍,可I2C设备就是不响应?逻辑分析仪一抓,发现每次地址发出去后都是NACK。这时候你可能会怀疑人生:难…

作者头像 李华
网站建设 2026/4/11 22:58:39

Hearthstone-Script:解放双手的炉石传说智能助手全攻略

Hearthstone-Script:解放双手的炉石传说智能助手全攻略 【免费下载链接】Hearthstone-Script Hearthstone script(炉石传说脚本)(2024.01.25停更至国服回归) 项目地址: https://gitcode.com/gh_mirrors/he/Hearthsto…

作者头像 李华
网站建设 2026/4/3 1:44:13

LRCGET:为你的离线音乐库打造智能歌词同步系统

LRCGET:为你的离线音乐库打造智能歌词同步系统 【免费下载链接】lrcget Utility for mass-downloading LRC synced lyrics for your offline music library. 项目地址: https://gitcode.com/gh_mirrors/lr/lrcget LRCGET是一款专为离线音乐库设计的批量歌词下…

作者头像 李华