Java与设计模式(02)--工厂方法模式

java设计模式7,一看就懂,架构灵魂,工厂方法模式 工厂模式也称简单工厂模式,是创建型设计模式的一种,这种设计模式提供了按需创建对象的最佳方式。同时,这种创建方式不会对外暴露创建细节,通常会通过一个统一的接口创建所需对象。 阅读详情

我们接着之前的简单工厂模式继续。

之前讨论过,如果不在使用中通过传入类名参数传入对象,我们在每新增一个类时,都需要修改一次produce()方法,所以我们说简单工厂方法的灵活性是不够的,不符合“开放——封闭”原则。


我们考虑一下,将工厂定义为接口,将创建工作放置到子类中,这样代码变为:

我们的实体类:

Car

public interface Car {
	public void go();
}

Bus

public class Bus implements Car {
	@Override
	public void go() {
		System.out.println("Bus is going...");
	}
}

Truck

public class Truck implements Car {
	@Override
	public void go() {
		System.out.println("Truck is going...");
	}
}
我们的工厂类:

CarFactory被定义为接口:

public interface CarFactory {
	public Car produce();
}

两个工厂实现:

public class BusFactory implements CarFactory {
	@Override
	public Car produce() {
		return new Bus();
	}
}

public class TruckFactory implements CarFactory {
	@Override
	public Car produce() {
		return new Truck();
	}
}

测试类:

public class Test {
	public static void main(String[] args) {
		CarFactory factory = new BusFactory();
		Car car = factory.produce();
		car.go();
	}
}

这种模式有一个好处就是:

如果我们创建一个新的Sedan类,为了能够创建Sedan对象:

public class Sedan implements Car {
	@Override
	public void go() {
		System.out.println("Sedan is going...");
	}

}

public class SedanFactory implements CarFactory {
	@Override
	public Car produce() {
		return new Sedan();
	}

}


我们能够看出来,工厂方法模式的好处是我们在添加新的类的时候,不需要像简单工厂模式的那样修改factory类,而是实现factory接口即可。也就是说我们在不修改现有代码的情况下扩展了我们模块的功能,这样我们能够在灵活性和健壮性上达到一个很好的平衡。



ABAP 7.40 新语法介绍系列之二 - ABAP 类型转换操作符 CONV 这个lv_input_s变量的唯一使命,就是接收来自 char10 类型的 lv_input_c 变量的值,然后传递到 print 方法里去。 阅读详情

相关推荐

SQLite学习——Dapper初识

dapper下载:https://www.nuget.org/packages/Dapper/1.40.0

jiDxiaohuo的博客 1296

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

工厂方法模式去掉了简单工厂模式中工厂方法的静态属性使得它可以被子类继承。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式里不同的工厂子类来分担。工厂方法模式使用继承自抽象工厂角色的多个子类来代替简单工厂模式中的“顶级类”。这样便分担了对象创建的压力;避免工厂类中用逻辑判断来决定创建对象,而且这样使得结构变得相当灵活当有新的产品产生时,只要按照抽象产品角色、抽象工厂角色提供的规则来生成,那么就可以被客户使用,而不必去修改任何已有的代码,可以看出工厂方法模式符合开闭原则。

精神小牛马 1251

护网日志分析基础

简要介绍日志分析,给出日志分析的步骤和思路。要求根据日志中的字符串特征,识别攻击者的攻击工具;根据日志中的行为特征,确定攻击者可能的攻击手段等。总结归纳护网中常见的中间件Tomcat、Apache、Weblogic、Nginx、Apache、IIS、MySQL、SQL Server、Oracle的日志路径和日志配置文件路径等。

m0_59302403的博客 3698

【Java 设计模式】创建型之工厂方法模式

工厂方法模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但是将对象的实例化延迟到子类中。这样,在实际使用时,客户端代码不需要关心具体实例是哪个类,只需通过工厂方法获取对象即可。工厂方法模式通过解耦了客户端和具体类的关系,使系统更加灵活。工厂方法模式是一种常见且实用的设计模式,它通过定义一个工厂方法接口,将对象的实例化延迟到子类中,从而实现了客户端和具体类的解耦。在实际开发中,工厂方法模式常用于创建复杂对象、管理对象的生命周期等场景。通过灵活使用工厂方法模式,可以使系统更容易扩展和维护。

好久不见的流星 2459

多传感器标定全栈系统学习教程

无论是激光雷达(Lidar)、毫米波雷达(Radar)、相机(Camera)还是惯导(IMU),传感器之间的精确标定直接决定了系统的可靠性与性能。本文将以系统化的视角,梳理多传感器标定的核心知识体系,并分享一套覆盖全栈技术的学习路径。Calibration)是实现点云与图像融合的前提,而雷达与车辆的标定(Radar2Car)则是精准速度估计的关键。:Lidar2Car、Camera2Car的快速标定流程,标定板布置规范。:从单传感器标定入手(如相机内参),逐步过渡到多传感器联合标定。

weixin_41792788的博客 904

SystemC实战:用C++搞芯片建模的5个典型场景(含代码示例)

本文通过五个典型实战场景,详细介绍了如何使用SystemC这一基于C++的硬件建模库进行芯片设计与系统级建模。内容涵盖从基础并发模块构建、事务级总线建模、跨时钟域验证,到与ModelSim协同仿真及多核系统性能探索,并提供了完整的代码示例,帮助软件工程师利用熟悉的C++工具链高效参与硬件架构设计与验证。

weixin_29191761的博客 315

【设计模式】工厂方法模式 在java中的应用

【设计模式】工厂方法模式 在java中的应用

qq_42320804的博客 1396

【OpenClaw企业级智能体实战】第32篇:政企版OpenClaw安全落地指南——奇安信55页报告深度拆解与实战

2026年Q2,OpenClaw(俗称“龙虾”)安全风险集中爆发,公安部、工信部等监管机构密集发声,23万公网暴露实例、155个高危漏洞让企业“养虾”安全压力骤增。奇安信发布的55页《政企版龙虾安全使用指南》,以“看得清、管得住、用得好”为核心,构建了“端-网-云”三层防护体系。本文深度拆解这份报告的九大安全面与三大趋势,全景扫描奇安信、腾讯、360等头部厂商安全方案,提炼企业最低安全基线与实操配置,通过金融机构虚拟案例演示落地全流程,提供从资产摸底、规范制定到工具部署的完整解决方案。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 572

Java 设计模式之工厂方法模式

工厂方法模式,作为应用相当广泛的设计模式,是我们必须要掌握的,本文是在上一讲 “静态工厂方法模式” 的基础上继续讨论起来的,通过代码示例+Java源码介绍的方式,帮助大家理解这种设计模式。

牛角尖 918

RK3588 Buildroot 新建板级DTS

在rk3588 linux开发过程中,新创建板型主要基于硬件差异化、软件适配与优化、项目定制化等多方面需求。

501846585_QQAndroid_java 1298

基于 DnLUT 超高效的彩色图像去噪(CVPR 2025),本地部署 DnLUT 模型,图像去噪算法训练和推理,全网最详细教程

基于 DnLUT 超高效的彩色图像去噪(CVPR 2025),本地部署 DnLUT 模型,图像去噪算法训练和推理,全网最详细教程

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 364

Java 工厂方法模式

深入理解 Java工厂方法模式

小凯的博客 1303

基于matlab的形态学的权重自适应图像去噪

数学形态学以图像的形态特征为研究对象,通过设计一套独特的数字图像处理方法和理论来描述图像的基本特征和结构,通过引入集合的概念来描述图像中元素与元素、部分与部分的关系运算。因此,数学形态学的运算由基础的集合运算(并、交、补等)来定义,并且所有的图像矩阵都能被方便地转换为集合。随着集合理论研究的不断深入和实际应用的拓展,图像形态学处理也在图像分析、模式识别等领域起着重要的应用。实验结果表明,如果仅通过串联滤波器去噪,则往往具有一定的局限性,在结果图像中也保留着较为明显的噪声。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 757

【设计模式02】工厂方法模式

工厂方法模式是一种创建型设计模式,通过让子类决定实例化的类来解耦对象创建与使用。文章以电商支付场景为例,描述了当支付渠道不断增加时,传统if-else方式的弊端。该模式的核心是将对象创建逻辑封装在工厂类中,客户端只需知道抽象接口,无需关心具体实现。文章通过UML类图展示了模式结构,分析了适用场景,并提供了两种实现方式:经典工厂方法(通过子类实现)和参数化工厂(根据参数创建对象)。这种模式特别适合产品类型频繁变化或创建逻辑复杂的场景,能够有效提升代码的可扩展性和维护性。

专注后端技术架构,AI技术分享 1244

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【Java设计模式 02】工厂方法模式

为了解决该问题,我们可以在简单工厂模式的基础之上,对工厂这个概念再做一个抽象,引入抽象工厂和具体工厂的概念,从而添加新的产品只需要添加新的工厂类而无需修改原来的代码。支持运行时多态性:通过虚函数机制,可以在基类中声明一个通用的接口,派生类根据自己的需要重写该虚函数,使得在程序运行时能够根据实际对象类型调用适当的函数版本。定义一组方法的规范:接口定义了一组方法的签名,描述了一个类应该具有的行为,实现接口的类必须提供这些方法的具体实现。实现代码复用:接口可以被多个类实现,这样不同的类可以共享接口中定义的方法。

weixin_55252589的博客 1119

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

JAVA设计模式2:工厂方法模式,将对象的实例化过程封装在子类

本文讲解了 Java 设计模式中的工厂方法模式,并给出了样例代码,工厂方法模式是一种创建型设计模式,它提供了一种将对象的实例化过程封装在子类中的方式。

Designer 小郑的技术博客 1300

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Java与设计模式(2):工厂方法模式

工厂方法模式是一种创建型设计模式,它提供了一种将对象的创建委托给子类的方式。在工厂方法模式中,我们定义一个抽象的工厂类,该类负责定义创建对象的接口,但具体的对象创建由子类来实现。这样可以将对象的创建和使用解耦,使得系统更加灵活和可扩展。工厂方法模式的核心思想是将对象的创建延迟到子类中,通过子类的扩展来实现具体对象的创建。这样一来,我们可以根据需要新增具体产品类,而不需要修改已有的代码。同时,客户端只需要与抽象工厂类进行交互,无需关心具体的产品实现。

暗星涌动 1025

[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式

工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题。

程序员三木的博客 1749

Java设计模式——工厂方法模式

名称工厂方法模式问题在软件开发中,经常会遇到需要根据不同条件创建不同类型的对象的情况。如果直接在客户端代码中创建对象,会导致客户端代码与具体产品类耦合度较高,不利于后续的维护和扩展。方案定义一个抽象工厂接口或抽象类,其中包含一个用于创建产品的抽象方法。具体的产品由具体的工厂子类实现,每个具体工厂负责创建特定类型的产品。客户端通过调用工厂方法来创建产品,而不直接与具体产品类进行交互。效果将对象的创建与使用分离,降低了客户端代码与具体产品的耦合度。

2301_76180247的博客 1314

【设计模式】工厂方法模式

这就是工厂方法模式呀!

就很有趣的博客 1536

Java设计模式之《工厂方法模式》及使用场景

Java设计模式之《工厂方法模式》及使用场景 原创文章,转载请标注出处:Java设计模式之《工厂方法模式》及使用场景 一、概述 工厂,就是生产产品的地方。 在Java设计模式中使用工厂的概念,那就是生成对象的地方了。 本来直接就能创建的对象为何要增加一个工厂类呢? 这就需要了解工厂方法要解决的是什么问题了,如果只有一个类,我们直接new一个对象完事,这是最简单的;但是如果有多个类呢,而...

ilifei的博客 391

设计模式之工厂方法模式

定义 工厂方法模式,定义抽象工厂类来负责定义创建对象的公共接口,而具体工厂类则负责生成具体的对象。 类型 创建型。 角色: 抽象产品:它是定义产品的接口,产品对象的公共父类 具体产品:它实现了抽象产品接口,具体工厂和具体产品之间一一对应,具体产品由专门的具体工厂创建。 抽象工厂:用于返回一个产品。抽象工厂是工厂方法模式的核心,所有创建对象的工厂类都必须实现该接口。 具体工厂:它是抽象工厂类的子类,实现了抽象工厂中定义的工厂方法,并可由客户端调用,返回一个具体产品类的实例。 与简单工厂模式相比,工厂方法模式最

小灰狼与大白兔的博客 6044

Java二十三种设计模式-工厂方法模式(2/23)

工厂方法模式是一种创建型设计模式,用于将对象的创建过程封装在具体的工厂类中,而不是在客户端代码中直接创建。这种模式的目的是将对象创建的逻辑和使用逻辑分离,从而提高代码的可维护性和灵活性。工厂方法模式定义了一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method让类的实例化推迟到子类进行。工厂方法模式是一种强大且灵活的设计模式,适用于多种不同的软件开发场景。通过本文的深入分析,希望读者能够对工厂方法模式有更全面的理解,并在实际开发中做出合理的设计选择。

小相探索IT世界 1371

2024042801-重学Java设计模式《实战工厂方法模式》

工厂模式又称工厂方法模式,是一种创建型设计模式,其在父类中提供一个创建对象的方法, 允许子类决定实例化对象的类型。这种设计模式也是 Java 开发中最常见的一种模式,它的主要意图是定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。简单说就是为了提供代码结构的扩展性,屏蔽每一个功能类中的具体实现逻辑。让外部可以更加简单的只是知道调用即可,同时,这也是去掉众多ifelse的方式。当然这可能也有一些缺点,比如需要实现的类非常多,如何去维护,怎样减低开发成本。

qq_24428851的博客 365

23种设计模式之【工厂方法模式】-核心原理与 Java实践

框架需要提供扩展点时,如 Java 集合框架中的Collection接口的iterator()方法(工厂方法),由具体集合类(如ArrayList、HashSet)实现。工厂方法模式是创建型模式中应用最广泛的模式之一,它通过将对象创建延迟到子类,实现了创建逻辑的灵活扩展,是。简单工厂:由一个工厂类负责所有产品的创建,新增产品需修改工厂类(违反开闭原则)工厂方法:每个产品由对应的工厂创建,新增产品只需新增工厂(符合开闭原则)实现抽象工厂的工厂方法,返回具体产品的实例。

学习 记录 总结 分享 1029

设计模式之工厂方法模式(Java实现)

文章目录前言一、认识工厂模式二、引出工厂模式三、工厂模式实现3.1、简单工厂模式3.2、工厂方法模式总结参考资料 前言 本篇博客是关于工厂方法模式的实现,若文章中出现相关问题,请指出! 对应代码地址:Gitee(demo-exer/ java-Lear23designpatterns)、Github(java-demo/ java-Lear23designpatterns) 所有博客文件目录索引:博客目录索引(持续更新) 一、认识工厂模式 工厂模式定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建

每个人都是独一无二的,把握好自己的节奏,跟着自己的心走。 1786
上一篇: Java与设计模式(01)--简单工厂模式
下一篇: Java与设计模式(03)--抽象工厂模式
Soloman
博客等级 码龄25年 171粉丝 159原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值