登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
java设计模式【工厂方法模式】
java设计模式【工厂方法模式】
[ 复制链接 ]
欧阳雪枫
2025-6-6 09:58:03
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
java设计模式【工厂方法模式】
工厂方法模式
工厂方法模式
(
FACTORY METHOD
)是一种常用的类创建型设计模式,此模式的核心精神是封装类中变化的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,分别是抽象工厂;具体工厂;抽象产品;具体产品。
抽象工厂角色负责定义产品的创建接口,即产品的创建过程应当被推迟到子类中实现。具体工厂角色则实现这些创建接口,并负责实际创建产品的工作。抽象产品角色是工厂方法模式的核心,它定义了一个产品的接口,但并不实现具体的产品逻辑。具体产品角色则实现这些接口并负责具体的产品逻辑。
使用工厂方法模式可以在不修改具体工厂角色的情况下引入新的产品,从而简化了系统的设计,并提高了系统的可扩展性。
优缺点
优点:
系统的可扩展性非常好。因为在添加新产品时,只需要添加新的具体工厂和具体产品,而不需要修改现有系统的代码。这样就保证了系统的可扩展性。
易于维护和管理。由于工厂方法模式将创建产品的逻辑推迟到子类中实现,因此可以更容易地进行维护和管理。子类可以在不改变父类接口的情况下添加新的特性,从而减少了系统的开销。
提高了系统的可靠性。因为在添加新产品时,只需要修改具体工厂类,而不需要修改客户端代码。这样可以减少因客户端代码变化而导致的系统崩溃的可能性。
缺点:
增加了系统的复杂度。在实现工厂方法模式时,需要引入抽象层,这样就增加了系统的抽象性和理解难度,同时也增加了实现的难度。
需要更多的代码编写。使用工厂方法模式需要编写新的具体工厂类和具体产品类,这样就会增加代码的复杂度和维护的难度。
使用场景
产品具有复杂的结构和层次关系,需要在多个子类之间共享某些共性逻辑。使用工厂方法模式可以将这些共性逻辑提取出来,作为一个独立的类进行封装,从而简化代码并提高系统的可扩展性。
系统需要提供一些通用的功能,但是这些功能可能会在不同的产品中被重复使用。使用工厂方法模式可以将这些通用功能提取出来,作为一个独立的类进行封装,从而降低系统的开发成本。
系统中需要使用组件化的设计思想,将不同的组件封装成独立的类。使用工厂方法模式可以将这些组件的创建过程推迟到子类中实现,从而简化代码并提高系统的可维护性。
系统需要支持动态添加和删除产品。使用工厂方法模式可以在不修改客户端代码的情况下动态添加和删除产品,从而提高系统的灵活性和可扩展性。
具体实现
以下以产品A,产品B为例实现工厂方法模式。
抽象工厂
抽象工厂定义产品的创建接口返回抽象产品
/**
* 抽象工厂类
*/
public interface IFactory {
/**
* 定义创建产品接口
*
* @return 抽象产品
*/
IProduct getInstance();
}
复制代码
具体工厂
具体工厂继承实现工厂实现创建产品接口返回具体的产品
产品A工厂类
/**
* @author physicx
* @date 2023/5/15 上午10:12
* @desc 产品A具体工厂类
* Created with IntelliJ IDEA
*/
public class ProductAFactory implements IFactory {
/**
* 返回具体产品
*
* @return 产品A
*/
@Override
public IProduct getInstance() {
return new ProductA();
}
}
复制代码
产品B工厂类
/**
* @author physicx
* @date 2023/5/15 上午10:18
* @desc 产品B具体工厂
* Created with IntelliJ IDEA
*/
public class ProductBFactory implements IFactory {
/**
* 返回具体产品
*
* @return 产品B
*/
@Override
public IProduct getInstance() {
return new ProductB();
}
}
复制代码
抽象产品
抽象产品接口定义产品的默认方法和各产品实现有差异的方法
/**
* 抽象产品类
*/
public interface IProduct {
/**
* 产品公共方法
*/
default void publicMethod() {
System.out.println("公共方法");
}
/**
* 各个产品有差异方法,子类具体实现
*/
void printInfo();
}
复制代码
具体产品
具体产品实现抽象产品,各个产品对方法做自己的具体实现
产品A
/**
* @author physicx
* @date 2023/5/15 上午10:13
* @desc 产品A
* Created with IntelliJ IDEA
*/
public class ProductA implements IProduct {
private final static String NAME = "产品A";
/**
* 输出产品信息
*/
@Override
public void printInfo() {
System.out.println("产品名称:" + NAME);
}
}
复制代码
产品B
/**
* @author physicx
* @date 2023/5/15 上午10:17
* @desc 产品B
* Created with IntelliJ IDEA
*/
public class ProductB implements IProduct {
private final static String NAME = "产品B";
/**
* 输出产品信息
*/
@Override
public void printInfo() {
System.out.println("产品名称:" + NAME);
}
}
复制代码
调用示例
public static void main(String[] args) {
//产品A工厂方法调用
IProduct productA = new ProductAFactory().getInstance();
productA.printInfo();
//产品工厂方法调用
IProduct productB = new ProductBFactory().getInstance();
productB.printInfo();
}
复制代码
运行结果如下:
补充说明
后续会依次更新 详解java 23种设计模式,欢迎关注、交流、补充相关内容(如下)。
快捷导航设计模式简介总结单例模式详解工厂方法模式抽象工厂模式
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
java
设计模式
工厂
方法
模式
相关帖子
Java 25 (LTS) 重磅发布:AI、性能、安全全面革新,新手入门门槛再创新低!
Java 25 (LTS) 重磅发布:AI、性能、安全全面革新,新手入门门槛再创新低!
Java Optional 完全指南:优雅处理 null 的利器
上下文协议(MCP)Java SDK 指南
“静态回调+上下文指针”模式实现回调机制
RabbitMQ发布订阅模式同一消费者多个实例如何防止重复消费?
Java函数式接口——渐进式学习
大语言模型~Ollama本地模型和java一起体验LLM
17.行为型 - 观察者模式 (Observer Pattern)
设计模式简述
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
安全
Java 25 (LTS) 重磅发布:AI、性能、安全全面革新,新手入门门槛再创新低!
2
262
褐洌
2025-12-16
安全
Java 25 (LTS) 重磅发布:AI、性能、安全全面革新,新手入门门槛再创新低!
2
320
肿圬后
2025-12-16
业界
Java Optional 完全指南:优雅处理 null 的利器
0
972
古修蟑
2025-12-17
业界
上下文协议(MCP)Java SDK 指南
0
294
豌笆
2025-12-17
安全
“静态回调+上下文指针”模式实现回调机制
1
616
嫂潍
2025-12-17
业界
RabbitMQ发布订阅模式同一消费者多个实例如何防止重复消费?
1
758
滕佩杉
2025-12-18
业界
Java函数式接口——渐进式学习
0
500
列蜜瘘
2025-12-18
安全
大语言模型~Ollama本地模型和java一起体验LLM
0
488
裴涛
2025-12-18
安全
17.行为型 - 观察者模式 (Observer Pattern)
1
919
抽厉
2025-12-19
安全
设计模式简述
0
268
厨浴
2025-12-19
回复
(1)
客臂渐
2025-10-30 00:49:44
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
yyds。多谢分享
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
欧阳雪枫
2025-10-30 00:49:44
关注
0
粉丝关注
24
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994892
kk14977
6845358
4
xiangqian
638210
5
韶又彤
9997
6
宋子
9981
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9949
查看更多
今日好文热榜
931
上周热点回顾(12.15-12.21)
828
国产化Word处理组件Spire.DOC教程:通过Pyt
470
架构师必备:后端程序员需要了解的数仓知识
322
【GitHub每日速递 20251222】Paru:功能爆
958
企业级多智能体系统(MAS)架构深度研究:C
195
北京守嘉陪诊登顶2025年度陪诊行业排行 专
235
流量暴跌 96%:AI 聊天机器人正在构建危险
176
AI生成论文查重能过么?8款AI写论文软件测
510
懒人长期理财的投资系统
508
第40次CCFCSP认证邮寄
868
第40次CCFCSP认证邮寄
854
第40次CCFCSP认证邮寄
443
用 .NET MAUI 10 + VS Copilot 从 0 开发一
872
【节点】[GammaToLinearSpaceExact节点]原
380
[20251218]测试sql语句子光标的执行性能(21
500
HECTF2025
17
《C语言程序设计》琐碎知识点总结笔记
378
NGD-SLAM(三)
48
AI 领域职业发展分享总结(吴恩达新课内容
103
【面试题】数据库事务隔离与传播属性是什么