1. 设计模式--工厂办法模式

news/2025/9/24 11:18:53/文章来源:https://www.cnblogs.com/lxjshuju/p/19108808

一. 工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一,它提供了一种创建对象的方式,使得创建对象的过程与使用对象的过程分离。

工厂模式提供了一种创建对象的方式,而无需指定要创建的具体类。

二. 简单工厂模式

1.首先定义一个接口

public interface Course {
void make();
}

2.创建实现接口的两个实体类JavaCourse和PythonCourse

public class JavaCourse
implements Course {
@Override
public void make() {
System.out.println("制作Java课程");
}
}
public class PythonCourse
implements Course {
@Override
public void make() {
System.out.println("制作Python课程");
}
}

3.创建一个工厂,根据传入的参数生成对应的实体

public class SimpleCourseFactory
{
public Course getCourse(String course) {
if (course.equalsIgnoreCase("java")) {
return new JavaCourse();
} else if (course.equalsIgnoreCase("python")) {
return new PythonCourse();
}
return null;
}
}

4.测试

public class Main
{
public static void main(String[] args) {
SimpleCourseFactory courseFactory = new SimpleCourseFactory();
Course course1 = courseFactory.getCourse("java");
course1.make();
Course course2 = courseFactory.getCourse("python");
course2.make();
}
}

运行结果:

制作Java课程
制作Python课程

5.存在的问题
当前Course对象的创建逻辑全在SimpleCourseFactory类getCourse方法中,如果需要新增一种新的Course对象,则需要修改getCourse方法。这违背了软件设计中的"开闭原则"。

三. 工厂方法模式

基于简单工厂模式中存在的问题,可以将对象的创建抽象出一个独立的接口,不同的对象实现不同的工厂类。

1.创建工厂类接口

public interface CourseFactory {
Course getCourse();
}

2.实现两个实体类所对应的工厂类

public class JavaCourseFactory
implements CourseFactory{
@Override
public Course getCourse() {
return new JavaCourse();
}
}
public class PythonCourseFactory
implements CourseFactory{
@Override
public Course getCourse() {
return new PythonCourse();
}
}

3.测试

public class Main
{
public static void main(String[] args) {
CourseFactory courseFactory = new JavaCourseFactory();
Course course = courseFactory.getCourse();
course.make();
courseFactory = new PythonCourseFactory();
course = courseFactory.getCourse();
course.make();
}
}

运行结果:

制作Java课程
制作Python课程

四. 总结

适用场景:创建同一种对象时需要将对象的创建与使用解耦开时可以使用工厂方法模式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/915626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汽车视频总线采集过程中,如何兼顾响应速度和可靠性?

汽车测试中“快速响应”与“技术可靠”难以兼得?本文详解如何基于ADTF模块化平台,通过图形化连接Filter组件,无需编码即可快速集成多路视频与总线数据,实现高精度同步采集与无丢包采集录制,破解多设备同步与高带宽…

P8865 [NOIP2022] 种花

P8865 [NOIP2022] 种花#include <bits/stdc++.h> using namespace std;const int mod = 998244353,maxn = 1e3 + 10; int a[maxn][maxn],down[maxn][maxn],r[maxn][maxn],up[maxn][maxn];int main(){int T,id;ci…

traefik 反向代理 + IdentityServer4

traefik 反向代理 + IdentityServer4

店铺的网站怎么做精品成品网站1688

1、安装 docker a、使用 Homebrew 安装 brew install --cask --appdir/Applications docker b、手动下载安装 1、安装包下载地址&#xff1a;Install Docker Desktop on Mac | Docker Docs 根据自己的笔记本型号选择&#xff0c;我这边选择的是 intel chip 2、下载安装即可&a…

在线一键建站系统wordpress 登陆 403

文章目录 一、问题描述二、解决方法 一、问题描述 当我们在代码页面上引入Vue.js(开发版本)时&#xff0c;运行代码会出现以下提示&#xff0c;这句话的意思是&#xff1a;您正在开发模式下运行Vue&#xff0c;在进行生产部署时&#xff0c;请确保打开生产模式 You are runni…

麦角硫因制备关键技术和设备

麦角硫因制备概述 麦角硫因(L-Ergothioneine,简称EGT)是一种天然的稀有手性氨基酸衍生物,具有强大的抗氧化、抗衰老和细胞保护功能。它最初于1909年从麦角真菌中分离而出,现广泛应用于化妆品、食品和医药领域。由…

2025年十大好用网盘推荐:功能、口碑与性价比大对比

不知如何选择网盘?本文为解决此难题,深度评测并盘点了2025年十大热门网盘,涵盖坚果云、百度网盘、阿里云盘等。文章从功能特色、数据安全、团队协作等多维度进行对比分析,旨在帮助用户依据自身需求,精准挑选出最适…

Word-通过宏格式化文档中的表格和图片

1、打开Word文档,找到视图。 2、创建宏脚本Sub 表格格式化()On Error Resume Next 忽略合并单元格等错误Application.ScreenUpdating = FalseDim tbl As Table, col As ColumnDim counter As Integer: counter = …

常用网站建设软件wordpress 幻灯片标签

摘要 本论文主要论述了如何使用JAVA语言开发一个音乐网站与分享平台 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述音乐网站与分享平台的当前背景以及系统开…

有多少个购物网站网站建设与管理模拟试卷

很多媒体大肆宣扬Fortnite和Roblox是元宇宙UGC平台巨头的竞争对手,但实际上它们似乎各自占据了UGC游戏市场的不同部分。对于Fortnite来说,主要是射击游戏;而对于Roblox来说,则是其他所有类型的游戏。 至少在目前,这两个平台在市场定位和用户群体上有着明显的差异,它们的…

徐州企业网站排名优化微信用大型网站站做跳板

本文为第0篇 专栏简介 本专栏是优质Rust技术专栏&#xff0c;推荐精通一门技术栈的蟹友&#xff0c;不建议基础的同学&#xff08;无基础学Rust也是牛人[手动捂脸]&#xff09; 感谢Rust圣经开源社区的同学&#xff0c;为后来者提供了非常优秀的Rust学习资源 本文使用&…

反向代理 traefik - 健康检查

反向代理 traefik 配置end.

一些想法 - CelestialZ

引言 这并不是我开通的第一个博客,我在中学时期也在zhihu、bilibili上记录数学学习经历。我希望这个因辅修cs而创建的博客账号,能记录一些我学习cs的历程。以下是我对后续博客内容的展望,可能与实际情况有出入,可能…

使用 Ansible 批量安装 Docker

使用 Ansible 批量安装 Docker1. 主机列表IP 主机名 内存(GB) CPU核数 磁盘 操作系统 CPU 架构10.0.0.13 arc-pro-dc01 8 1 500GB CentOS 7.9.2009 x86_6410.0.0.14 arc-pro-dc02 8 1 500GB CentOS 7.9.2009 x86_641…

编程规范---日志规范

最近收到邮件,由于我的一个宏,导致某个场景下打印较多,性能下降,项目组再次强制编程规范 1. 之前写的时候,专门问过这个规范-------------缺失官方的,对于允许哪些,不允许哪些,可能导致哪些问题,缺少明确的声…

深入解析:find_code 插件 react_vite

深入解析:find_code 插件 react_vitepre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mona…

二十一、DevOps:从零建设基于K8s的DevOps平台(二)

二十一、DevOps:从零建设基于K8s的DevOps平台(二) 目录二十一、DevOps:从零建设基于K8s的DevOps平台(二)1、DevOps 平台建设1.1 DevOps 流程1.2 DevOps 平台整体设计1.3 集群规划(学习测试环境)1.4 Harbor 私有…

中电金信:从“通用”到“专用”:加速实现金融行业生成式AI应用的必由之路

9月20日,香江科技论坛暨中国计算机学会(CCF)香港两周年交流活动在香港成功举办。本次活动以“共建香港人工智能协同创新高地”为主题,汇聚了来自CCF、高校、企业及科研机构的百余位专家代表。中国电子首席科学家、…

自动构建高质量测试集

基于文档自动生成 QA 对(文档 - 问题 - 答案三元组)是构建高质量测试集、知识库评估或模型微调数据的核心方法,其核心流程围绕 “文档采样→内容解析→LLM 生成→质量过滤→格式输出” 展开。 一、核心目标与前置准…

SAP BAPI_PR_CREATE 创建采购申请(含自定义字段)

创建采购申请一般有两个函数:BAPI_PR_CREATE 和 BAPI_REQUISITION_CREATE。 使用BAPI_REQUISITION_CREATE创建常规的标准的采购申请比较方便,代码如下FUNCTION ZFM_OA2SAP_CREAT_PR. *"-----------------------…