Java设计模式 三 工厂方法模式 (Factory Method Pattern)

.NET 设计模式—工厂方法模式(Factory Method Pattern) 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。这种模式使得对象的创建延迟到子类,从而实现了对扩展开放、对修改关闭的原则。工厂方法模式又简称为工厂模式(Factory Pattern),又可称作虚拟构造器模式(Virtual Constructor Pattern)或多态工厂模式(Polymorphic Factory Pattern)。工厂方法模式是一种类创建型模式。 阅读详情

工厂方法模式 (Factory Method Pattern) 是一种常见的创建型设计模式,旨在通过定义一个接口来创建对象,而将实例化对象的具体类延迟到子类中。工厂方法模式允许客户端通过工厂方法来创建对象,而不需要直接调用构造函数,这样可以减少代码中的耦合度,并允许在不修改客户端代码的情况下更改对象的创建过程。

1. 工厂方法模式的结构

工厂方法模式的核心思想是将对象的创建与使用分开,定义一个工厂方法用于创建对象,并让子类实现这个工厂方法。

  • Product(产品接口):定义了产品的接口。
  • ConcreteProduct(具体产品):实现了 Product 接口,具体产品类。
  • Creator(创建者):声明了工厂方法,该方法返回一个 Product 对象。通常是抽象类或接口。
  • ConcreteCreator(具体创建者):实现了 Creator 类,并实现了工厂方法来返回具体的产品对象。

2. 工厂方法模式的优点

  • 扩展性强:增加新的具体产品类时,只需要添加新的 ConcreteProduct 类和新的 ConcreteCreator 子类,而不需要修改现有的客户端代码。
  • 解耦合:客户端不需要知道产品类的具体实现,只需依赖产品接口和工厂接口,可以降低类之间的耦合度。
  • 提高代码可维护性:如果产品的创建方式发生变化,只需要在工厂方法中进行修改,不会影响到客户端代码。

3. 工厂方法模式的缺点

  • 类的数量增加:为了每种产品提供一个工厂类,会导致系统中的类数量增加,可能使系统变得更复杂。
  • 灵活性差:如果需要创建大量不同类型的对象时,工厂方法模式的实现会比较冗长,维护成本高。

4. 工厂方法模式的实现

1) 定义产品接口

产品接口定义了不同类型产品的公共方法。

public interface Product {
    void doSomething();
}
2) 具体产品类

具体产品类实现了产品接口。

public class ConcreteProductA implements Product {
    @Override
    public void doSomething() {
        System.out.println("ConcreteProductA doing something.");
    }
}

public class ConcreteProductB implements Product {
    @Override
    public void doSomething() {
        System.out.println("ConcreteProductB doing something.");
    }
}
3) 定义创建者接口

创建者接口声明了工厂方法,用来创建产品对象。

public abstract class Creator {
    public abstract Product factoryMethod();
}
4) 具体创建者类

具体创建者类实现了工厂方法,返回具体的产品实例。

public class ConcreteCreatorA extends Creator {
    @Override
    public Product factoryMethod() {
        return new ConcreteProductA();
    }
}

public class ConcreteCreatorB extends Creator {
    @Override
    public Product factoryMethod() {
        return new ConcreteProductB();
    }
}
5) 客户端使用工厂方法

客户端只需要依赖于 Creator 类,而无需知道产品的具体实现。通过工厂方法来创建产品实例。

public class Client {
    public static void main(String[] args) {
        Creator creatorA = new ConcreteCreatorA();
        Product productA = creatorA.factoryMethod();
        productA.doSomething();  // 输出: ConcreteProductA doing something.
        
        Creator creatorB = new ConcreteCreatorB();
        Product productB = creatorB.factoryMethod();
        productB.doSomething();  // 输出: ConcreteProductB doing something.
    }
}

5. 工厂方法模式的应用场景

  • 当一个类不知道它所需要的对象的具体类时。通过使用工厂方法,客户端可以依赖接口来获取对象,而无需关心具体的实现类。
  • 当类的实例化过程可能会发生变化时。如果产品的创建过程需要进行修改,工厂方法模式使得客户端不需要修改,只需修改工厂方法即可。
  • 需要通过子类来决定产品的具体类型时。子类可以通过重写工厂方法来创建不同的产品实例。

6. 工厂方法模式与简单工厂模式的比较

  • 简单工厂模式 (Simple Factory):通过一个静态方法来创建对象,客户端调用时直接提供产品类型(通常是枚举或字符串),而不需要依赖工厂接口和具体的工厂类。

    • 缺点:简单工厂模式会使得工厂方法与客户端耦合,产品类型的增加导致修改工厂方法,违反了“开闭原则”(对扩展开放,对修改封闭)。
  • 工厂方法模式:工厂方法模式定义了一个工厂接口,允许不同的工厂子类来创建不同的产品。相比于简单工厂,工厂方法模式更加灵活,符合“开闭原则”。

7. 总结

  • 工厂方法模式 适用于当你需要生成不同类型的产品时,并且希望通过工厂方法来解耦产品的创建与使用逻辑。
  • 它将对象的创建推迟到子类中,并通过工厂方法来返回具体的产品实例,减少了系统中类之间的耦合。
  • 当系统中的产品种类较多时,使用工厂方法模式能够方便地扩展和修改产品的实现,而不影响现有的客户端代码。

通过这种方式,工厂方法模式可以帮助你构建一个灵活且易于扩展的系统。

【愚公系列】二十三种设计模式(一)-工厂方法模式(Factory Method Pattern) 设计模式(Design Pattern)是软件开发领域的宝贵经验,是多人反复借鉴和广泛应用的代码设计指导。它们是一系列经过分类和归纳的代码组织方法,旨在实现可重用性、可维护性和可理解性。使用设计模式,我们能够编写高质量的代码,使其更易于他人理解,并提供了代码可靠性的保证。毫无疑问,设计模式对个人、团队和整个系统都带来了显著的益处。它们将代码开发提升到工程化水平,为软件工程构建提供了坚实的基础,就如同大厦的一块块精巧的砖石一样。在项目中明智地应用设计模式可以完美地解决各种复杂问题。 阅读详情

相关推荐

别再为10G UDP发愁了!手把手教你用Xilinx 10G/25G Ethernet Subsystem IP核搭建FPGA网络栈(附12套工程源码)

本文详细介绍了基于Xilinx UltraScale架构的FPGA网络栈开发,重点讲解了10G/25G Ethernet Subsystem IP核的应用实践。通过手把手教程和12套工程源码,帮助开发者解决10G UDP通信中的物理层接口、协议栈实现和系统集成等核心挑战,实现高性能FPGA网络栈搭建。

weixin_42522575的博客 364

设计模式-工厂方法模式(Factory Method Pattern)

工厂方法模式 定义 工厂方法模式,定义抽象工厂类来负责定义创建对象的公共接口,而具体工厂类则负责生成具体的对象。与简单工厂模式相比,工厂方法模式最重要的区别是引入了抽象工厂角色,抽象工厂可以是接口,也可以是抽象类。 类型 创建型。 优点 更加符合开闭原则,当需要增加一种新的产品时,只需要增加相应的具体产品类和相应的具体工厂类即可,而简单工厂模式则需要修改工厂类的if-else判断逻辑,会非常繁琐。...

kaven 4931

PFC电压环与电流环的带宽设计:如何避免输入电流畸变?

本文深入探讨了PFC电路中电压环与电流环的带宽设计问题,揭示了快速电压环导致输入电流畸变的机制,并提供了避免THD上升的工程实践方法。通过分析双环控制架构、谐波失真原理及带宽设计黄金法则,帮助工程师优化PFC系统性能,实现高功率因数与低谐波失真的平衡。

weixin_28304023的博客 420

设计模式精讲 Day 2:工厂方法模式(Factory Method Pattern)

工厂方法模式是一种创建型设计模式,它定义了一个创建对象的接口,但由子类决定实例化哪一个类。工厂方法让类的实例化延迟到子类中进行,从而避免了直接在客户端代码中硬编码具体的类名。核心思想:将对象的创建职责交给子类,而不是在父类中硬编码。该模式通过封装对象的创建逻辑,实现了对变化的隔离,使系统更加灵活、可扩展。Log/*** 日志记录器接口*/LogFactory工厂方法:关注单一产品的创建,每个工厂只负责一种产品。抽象工厂:关注一组相关产品的创建,适合创建多个相关对象。

在未来等你的专栏 1217

单片机毕业设计-基于STM32单片机的智能镜系统-仿真设计

可通过MQ-2监测当前烟雾浓度可通过温湿度传感器监测当前温湿度可通过光照强度传感器监测光照强度可通过蜂鸣器进行烟雾报警可通过语音识别模块进行反馈播报状态可通过按键设置阈值三个继电器控制灯、加湿、风扇标签:STM32单片机、OLED112864、DHT11、BH1750、继电器、SU-03T、MQ-2、蜂鸣器题目扩展:智能家居安防、智能大棚控制系统、智能环境检测系统项目编号:ZL-32-240604-FZ。

bsdog11的博客 966

计算机组成原理课程设计_微程序控制的简单模型机设计

微程序控制的简单模型机设计 要求 基本要求 完成一个简单主机的设计,模型机应具备如下能力:在自行设计的指令集基础上,运行自行编写的简单用户程序,实现特定运算功能。 弹性要求 在此基础上,完成必要的扩展,实现模型机的功能扩展设计,包括:实现多种运算功能(指令集的扩充)、支持更为丰富的寻址方式、有更为完善的微程序设计等。 实验软件和硬件环境 QuartusII, FPGA计算机组...

sailist的记录站 3万+

【设计模式】工厂方法模式(Factory Method Pattern)

工厂方法模式是一种创建型设计模式,它定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。这样,工厂方法模式让一个类的实例化延迟到其子类。在Java中,工厂方法模式经常用于创建对象,使得客户端代码不需要直接依赖具体的类,而是依赖于接口或抽象类。工厂方法模式是一种常见且实用的设计模式,通过定义工厂接口和具体工厂类,将对象的创建延迟到子类中实现,从而提高了代码的灵活性和扩展性。在设计系统时,根据具体需求选择合适的设计模式能够提高代码的可维护性和可扩展性。

无休居士的博客 1930

告别MRT!用ArcGIS脚本批量处理MODIS数据,从HDF到NDVI/ET成品图全流程(附Python代码)

本文详细介绍了使用ArcGIS Python脚本自动化处理MODIS数据的全流程,从HDF文件提取到生成NDVI/ET成品图。通过优化子数据集提取、智能镶嵌策略和投影转换等核心步骤,大幅提升处理效率,告别传统MRT工具的手工操作。附带的Python代码可直接应用于实际项目,特别适合批量处理大规模遥感数据。

weixin_30872337的博客 219

23种设计模式——工厂方法模式(Factory Method Pattern)详解

本文介绍了23种经典设计模式之——工厂方法模式(Factory Method Pattern)的说明及使用

Meteors.的博客 1381

SOME/IP协议详解「4.1·经典AutoSAR下的SOME/IP架构」

SOME/IP协议详解「4.1·经典AutoSAR下的SOME/IP架构」 点击返回雪云飞星的SOME/IP协议详解「总目录」 SOME/IP协议详解「4.1·经典AutoSAR下的SOME/IP架构」1 CP的SOME/IP架构概览2 业务报文通信流3 服务发现通信和控制流 1 CP的SOME/IP架构概览 2 业务报文通信流 3 服务发现通信和控制流 点击返回雪云飞星的SOME/IP协议详解「总目录」 ...

雪云飞星的博客 6067

Autosar MCAL-S32K324 Fls配置-基于EB

Autosar MCAL Flash配置,基于S32K324,EB软件

赞的博客 1513

工厂方法模式(Factory Method Pattern)

工厂方法模式概述与demo实现

打盹儿的博客 1366

Python爬虫博客:如何抓取时事新闻信息 —— 从各大新闻网站获取实时新闻数据

发送请求:向目标新闻网站发送 HTTP 请求,获取网页内容。解析网页:使用解析库(如)从网页中提取新闻标题、摘要、内容、发布时间等。绕过反爬虫机制:使用代理、设置请求头、模拟浏览器行为等策略绕过反爬虫技术。数据存储与清洗:将抓取的数据保存到本地文件或数据库中,并进行清洗,确保数据的可用性。在抓取过程中,我们还会面对很多实际问题,比如反爬虫技术、分页抓取、动态加载的内容等。接下来,我们将逐步介绍如何使用不同技术抓取静态和动态网页,并对抓取的内容进行处理。Scrapy。

2201_76125261的博客 2135

工厂方法模式(Factory Method Pattern) 续

当需要创建多个具有相似功能的对象时,可以使用工厂方法模式来统一创建这些对象。例如,一个图片处理软件需要支持多种格式的图片导入,可以使用工厂方法模式来创建不同格式图片导入器的实例。当对象的创建过程比较复杂,需要进行一系列的初始化操作时,可以使用工厂方法模式来封装这些复杂的创建过程。例如,一个电子商务网站需要生成订单时,订单的创建过程可能涉及到一系列的验证和初始化操作,可以使用工厂方法模式来封装这些复杂的创建过程。当需要动态地决定创建哪种对象时,可以使用工厂方法模式。

IT_WEH_coder的博客 1006

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

DesignPattern_Java:Factory Method Pattern

工厂方法模式 Factory Method :(虚拟构造函数模式 Virtual Constructor,多态性工厂模式 Ploymorphic Facoty) Define an interface for creating an object,but let subclasses decide which class to instantiate.Factory Metho...

diandingyin9417的博客 159

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

工厂方法模式(Factory Method Pattern)

工厂方法模式的优点是,我们知道要一个具体的对象,也知道这个对象的类。但是不用关心谁创建了它,创建的过程如何。在上述日志框架中的应用可以看出,多个工厂其实是冲突的。在实际使用时我们只用一个即可。但是这并不是方法工厂模式的要求,方法工厂模式并没有要求多个工厂不能共存,需要结合实际的应用场景来灵活设计、灵活使用。切勿生搬硬套!

jaune162的专栏,最新动态请关注:https://jaune162.blog 1678

设计模式一、 工厂方法模式(Factory Method Pattern)

设计模式一、 工厂方法模式(Factory Method Pattern)一、概念:定义一个用于创建对象的接口,让子类决定将哪个工厂类实例化。 (Factory Method使得一个类的实例化延迟到其子类)二、目的:解决接口选择的问题。三、方式:让其子类实现方法...

Ysunflower的博客 408

设计模式介绍和实现:工厂方法模式(Factory Method Pattern)

工厂方法模式将客户端与具体产品的实现分离,客户端只需知道产品的抽象类型,无需关心具体的实现细节,从而降低了客户端和具体产品之间的耦合性。增加了系统的抽象性和理解难度:工厂方法模式引入了更多的抽象层次,使得系统更加灵活,但也增加了理解和学习的难度。增加新的产品类时,无需修改已有代码,只需添加新的具体产品类和具体工厂类即可。类的个数增加:引入了多个工厂类和产品类,使得系统中的类的数量增加,增加了代码的复杂度和维护成本。:通过添加新的具体工厂和具体产品类,可以很方便地扩展系统的功能,而无需修改现有的代码。

AmosLLc的博客 686

【设计模式】Java设计模式——工厂方法模式(Factory Method Pattern)

1. 介绍 1.1 定义 工厂方法模式(Factory Method Pattern)又称工厂模式、虚拟构造器模式、多台工厂模式,它属于创建型模式 工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象。 1.2 作用 将产品类的实例化操作延迟到工厂子类中完成,由工厂子类确定该实例化哪一个具体产品类 2. 模式结构 2.1 UML类图 2.2 模式组成 抽象工厂(Factory):具体工厂的父类,描述具体工厂的公共接口 具体工厂(Concrete Factory):被外部调用

Dust_heart的博客 970

工厂方法模式-Factory Method Pattern

工厂方法模式-Factory Method Pattern 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。工厂方法模式又简称为工厂模式(Factory Pattern),又称作虚拟构造器模式(Virtual Constructor Pattern)或多态工厂模式(Polymorphic Factory Pattern)。工厂方法模式是一种类创建型模式 这是它的结构图: 它包含四个角色: ● P

帕布里克沃德曼的博客 285

Java设计模式——工厂方法模式(Factory Method Pattern)

都是

奔跑8蜗牛 283

设计模式 - 创建型 - 工厂方法模式(Factory Method Pattern)

工厂方法模式是一种创建型设计模式,通过抽象工厂接口将对象创建延迟到子类,实现创建与使用逻辑的解耦。该模式符合开闭原则,支持动态扩展,但会增加类数量。核心结构包括抽象产品、具体产品、抽象工厂和具体工厂四个角色。相比简单工厂模式,工厂方法模式更灵活但更复杂,适用于日志系统、框架设计等需要多态创建的场景。示例展示了如何用Java实现该模式,通过子类工厂创建具体产品。该模式提升了系统扩展性,但需根据实际需求权衡使用。

csdn_tom_168的博客 920

Java设计模式--工厂方法模式【Factory Method Pattern】

工厂方法模式去掉了简单工厂模式中工厂方法的静态属性,使得它可以被子类继承。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式里不同的工厂子类来分担,程序大大提高了灵活性——当有新的产品时,只要按照抽象产品角色、抽象工厂角色提供的合同来生成,而不必去修改任何已有的代码,程序提高了扩展性,同时也符合”开闭原则“。        沿用简单工厂方法模式中的例子,随着《中餐厅》的火爆之泰国程度,

CoderLover 463

Java GoF 23种设计模式-创建型模式-工厂方法模式(Factory Method Pattern)

文章目录一、模式定义二、模式动机三、模式结构四、代码实现五、缺点 一、模式定义 工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于创建型模式。 在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。 工厂方法模式

WU4566285的博客 432

【Java设计模式】Factory Method Pattern in Java: 使用多态制造增强灵活性

在基于类的编程中,工厂方法模式是一种创建型模式,它使用工厂方法来处理创建对象的问题,而无需指定将创建的对象的确切类。这是通过调用工厂方法来创建对象来完成的——要么在接口中指定并由子类实现,要么在基类中实现并可选地由派生类重写——而不是通过调用构造函数。中被重写,每个子类都知道如何创建和管理各自的包裹类型。这样,中央系统可以处理递送请求,而无需知道每个包裹类型是如何创建和处理的细节,从而实现了灵活性和更易于维护。正如我们在下面的示例中看到的,工厂方法在Java设计模式中对于实现灵活和可维护的代码至关重要。

道长的博客 1229
上一篇: Java 设计模式 二 单例模式 (Singleton Pattern)
下一篇: Java设计模式 四 抽象工厂模式 (Abstract Factory Pattern)
十方来财
十方来财 新星创作者: 编程框架技术领域 新星创作者: 编程框架技术领域
博客等级 码龄14年 8357粉丝 346原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十方来财

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值