创建型设计模式-工厂方法

设计模式(9)——创建型模式之工厂方法 工厂方法是一种创建型设计模式,通过在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型。该模式的结构包括产品接口、具体产品、创建者类和具体创建者。工厂方法的核心思想是将对象的创建过程延迟到子类中,从而避免客户代码与具体产品类之间的耦合。适用场景包括无法预知对象确切类别及其依赖关系时。通过工厂方法,可以在不同操作系统或环境中生成特定类型的对象,而无需重写大量代码。例如,在跨平台UI开发中,工厂方法可以根据操作系统生成不同样式的按钮,同时保持对话框逻辑的一致性。这种设计模式提高了代码的灵活性和可扩展性。 阅读详情

工厂方法模式是一种创建型设计模式,它通过定义一个创建对象的接口,但将实际的对象创建延迟到子类中去完成。这样可以使一个类的实例化延迟到其子类。

在这里插入图片描述
举例来说, ​ 卡车Truck和 轮船Ship类都必须实现 运输Transport接口, 该接口声明了一个名为 deliver交付的方法。 每个类都将以不同的方式实现该方法: 卡车走陆路交付货物, 轮船走海路交付货物。 ​ 陆路运输Road­Logistics类中的工厂方法返回卡车对象, 而 海路运输Sea­Logistics类则返回轮船对象。

public interface Transport {
    void deliver();
}

public class RoadLogistics implements Logistics {
    @Override
    public Transport createTransport() {
        return new Truck();
    }
}

public class SeaLogistics implements Logistics {
    @Override
    public Transport createTransport() {
        return new Ship();
    }
}

public interface Transport {
    void deliver();
}

public class Ship implements Transport {
    @Override
    public void deliver() {
        System.out.println("轮船通过水路运输");
    }
}

public class Truck implements Transport {
    @Override
    public void deliver() {
        System.out.println("卡车通过陆地运输");
    }
}

public static void main(String[] args) {
        Logistics logistics = new RoadLogistics();
        Transport logisticsInstance = logistics.createTransport();
        logisticsInstance.deliver();

        Logistics seaLogistics = new SeaLogistics();
        Transport seaLogisticsInstance = seaLogistics.createTransport();
        seaLogisticsInstance.deliver();

}

优点:

  • 松耦合:工厂方法模式将具体产品类和工厂类解耦,客户端代码只需要知道使用产品的接口,而无需关心具体产品是如何创建的。
  • 可扩展性:当需要新增产品时,只需添加新的具体产品类和对应的工厂类,不需要修改已有代码,符合开闭原则。
  • 符合单一职责原则:每个具体工厂类负责创建一种产品,符合类的职责单一性原则。
  • 隐藏复杂逻辑:客户端只需要关心所需产品的接口,不需要关心产品的创建过程,隐藏了具体实现细节。

缺点:

  • 类的数量增加:每增加一个具体产品类,就需要增加一个对应的具体工厂类,可能会导致类的数量激增。
  • 增加了系统复杂度:引入了额外的类和层次结构,可能会增加系统的复杂度和理解难度。
  • 不易于理解:相比直接实例化对象,使用工厂方法模式会增加阅读和理解代码的难度,特别是对于刚接触该模式的开发者来说。

工厂方法模式适合于那些创建对象的逻辑比较复杂,或者需要根据特定条件来创建不同对象的场景。在这些情况下,工厂方法模式能够提供灵活性和可扩展性,并帮助管理对象的创建过程。

数字电路与逻辑设计——组合逻辑篇 在数字电路中,根据逻辑功能的不同而分为两大类,组合逻辑电路与时序逻辑电路。 1、何为组合逻辑电路 我们只需铭记一点就是,这种电路的输出Y只与当时的输入X有关,而与之前的输入X’无关。所以这是一个可以随输入X的变化而瞬变输出Y的电路,如果用我们的Verilog代码来表示,则可能会出现在如下语句中: ①针对wire型变量,assign Y = X1 && X2; ②针对reg型变量,alway 阅读详情

相关推荐

Qt QWebEngine实战:手把手教你将Vue3/React前端项目嵌入C++桌面程序

本文详细介绍了如何利用Qt的QWebEngine模块将Vue3/React前端项目无缝嵌入C++桌面程序,实现现代前端框架与原生C++的深度整合。通过环境准备、项目架构设计、前端适配、Qt端集成、双向通信建立及性能优化等步骤,开发者可以高效构建兼具Web灵活性和本地系统能力的混合应用。

weixin_28736355的博客 390

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

学习内容来自B站UP主VoidMatrix,内容仅作笔记学习

WDaMu的博客 887

电力电子新手必看:COT控制模式的工作原理与典型应用场景解析

本文深入解析了COT控制模式的工作原理及其在电力电子领域的典型应用。COT控制(恒定导通时间控制)通过固定导通时间机制,解决了传统滞环控制的问题,特别适用于需要快速瞬态响应和高效率的应用场景,如CPU/GPU供电和便携设备电源管理。文章详细介绍了COT控制的核心流程、技术特点及设计实践中的关键考量,帮助电力电子新手快速掌握这一技术。

weixin_30745553的博客 522

Java创建型设计模式之简单工厂,工厂方法,抽象工厂

在Java的23中设计模式中,其中有创建型的一类创建模式,通常用来抽象封装创建对象来使用的,这一类创建模式是使得客户端调用者不用关心对象是如何创建,统统交给一个叫做“工厂”的对象来创建对应的对象。这样就能做到客户端不与想要创建的对象紧密地耦合,降低耦合度。 1.简单工厂 简单工厂具体来并不属于Java中的23种设计模式中之一,它只是一种对创建对象的简单的封装,只需要传入一个正确的参数,就...

我神级欧文的博客 547

MCGS触摸屏Modbus TCP通讯实战:从寄存器写入到字符串处理的完整代码解析

本文详细解析了MCGS触摸屏通过Modbus TCP协议实现寄存器写入和字符串处理的完整代码,涵盖单寄存器写入、多寄存器写入及字符串传输等核心技术。文章还提供了MCGS组态环境中的实战配置步骤和常见问题排查方法,帮助开发者快速掌握工业自动化通讯的关键技术。

study的专栏 755

从零开始:如何用Kimi OK Computer快速生成专业级数据分析报告和PPT(附实战案例)

本文详细介绍了如何利用Kimi OK Computer智能体模式,从零开始快速生成专业级数据分析报告和演示文稿。通过实战案例,解析了其任务规划、联网搜索、多工具协同和内容排版等核心能力,并提供了精准指令构造、工作流引导及成果精修的完整步骤,帮助用户高效完成从数据到成品的端到端交付。

weixin_29284201的博客 369

【JavaScript设计模式】创建型设计模式--简单工厂、工厂方法、抽象工厂

既然标题中提到了创建型设计模式,那就先来解释一下什么叫创建型设计模式?创建型设计模式是一类处理对象创建的设计模式,通过某种方式控制对象的创建来避免基本对象创建时可能导致设计上的问题或增加设计上的复杂度。--引自张荣铭的【JavaScript设计模式】       在一篇博客中,博主为了写工厂模式,在文章开始进行了一个简答的问题陈述,下面我将这段话也写进来:       原文“想象一个场景:如果

Wendy 1004

Selenium实战:突破反爬,自动化抓取国家知识产权局专利数据

网络爬虫是数据采集的核心技术,其原理是通过程序模拟浏览器行为,自动访问网页并提取结构化信息。在数据驱动决策的今天,高效获取公开数据对市场分析、技术调研和竞争情报至关重要。然而,面对广泛应用的JavaScript动态渲染和反爬虫机制,传统的静态页面抓取方法往往失效。Selenium作为浏览器自动化工具,通过驱动真实浏览器执行JavaScript,能够有效绕过前端反爬,实现“可见即可得”的数据抓取,在需要与页面进行复杂交互或处理动态内容的场景中价值显著。本文以【专利数据】抓取为例,结合【Selenium】工具,

weixin_33881140的博客 392

【设计模式】【创建型】工厂方法/抽象工厂

工厂方法以及抽象工厂都是频率出现比较高的设计模式,他们属于创建型。 工厂方法 英文:Factory Method 使用频率:高 作用: 定义一个创建对象的接口,让子类决定创建什么样的实例对象。 说明: 工厂类有时候不仅仅表现为创建一个产品类并返回该产品类,他也可以表现为一种业务相关的类,并且自行维护这个创建的产品。 比如有时候单纯的为了创建对象,我们就将其当作工厂,只负责创建对象。 而比如文档编辑器,工厂就是编辑器,那么他除了负责创建文档对象,他还负责维护这些创建的对象,并且操作这些对象。

265

【AI测试必学】DeepSeek API 快速入门:获取 API Key 与调用 API 步骤详解

DeepSeek API 使用与 OpenAI 兼容的格式,可以通过修改配置使用 OpenAI SDK。生成的 API Key 只会显示一次,请妥善保存。注册并登录账号,进入左侧导航栏的。创建 API Key。

blues_C的博客 1万+

华为流程L1-L6业务流程深度细化到可执行【附全文阅读】

该文档主要介绍了华为业务流程的深度细化及相关内容,包括流程框架、建模方法、流程模块描述、流程图建模等,旨在帮助企业构建有效的流程体系,实现战略目标。

cdfunlove的博客 4003

设计模式-创建型-工厂方法

介绍 工厂方法是一种创建型设计模式,其在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型。 场景 假如我们开发项目中的日志模块,业务初期只有控制台日志,大部分代码都在控制台日志类。随着业务发展,希望可以增加文件日志功能。 如果代码之间已经存在耦合关系,此时向程序添加新类并不是一件简单的事情。目前大部分代码都与控制台日志类有关。添加文件日志类需要修改全部代码,更可怕的是以后万一要拓展其他日志类,很可能需要再次大幅修改代码。 如此反复反复,恭喜成功诞生一份不可维护的祖传代码。 ???? 解决方案 工厂

曾是然的博客 216

RT-DETR训练前的准备,将数据集划分成训练集、测试集验证集(附完整脚本及使用说明)

在计算机视觉领域,当我们着手训练一个模型时,。其中,将数据集划分为和更是一项基础性且关键的操作。这篇博客分析了这一划分背后的原因、其重要意义以及如何通过代码实现,帮助大家更好地理解和运用这一技巧,。

Limiiiing的博客 906

设计模式——工厂方法模式(创建型)

设计模式之工厂方法模式(创建型模式)

大猩猩的博客 880

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

设计模式之创建型:工厂方法模式

工厂方法模式是一种创建型设计模式,它定义了一个创建对象的接口,但将具体实例化工作推迟到子类中,使得子类可以决定实例化哪个类。该模式通过继承实现对象创建的解耦,遵循“依赖倒置原则”和“开闭原则”。​。

keep simple 771

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

设计模式 - 创建型模式_工厂方法模式

优秀的代码在结构设计上松耦合易读易扩展,在领域实现上⾼内聚不对外暴漏实现细节不被外部⼲扰。⼯⼚模式⼜称⼯⼚⽅法模式,是⼀种创建型设计模式,其在⽗类中提供⼀个创建对象的⽅法, 允许⼦类决定实例化对象的类型。它的主要意图是定义⼀个创建对象的接⼝,让其⼦类⾃⼰决定实例化哪⼀个⼯⼚类,⼯⼚模式使其创建过程延迟到⼦类进⾏。优点: 简单说就是为了提供代码结构的扩展性,屏蔽每⼀个功能类中的具体实现逻辑。让外部可以更加简单的只是知道调⽤即可,同时,这也是去掉众多 ifelse 的⽅式。

小工匠 2万+

lwip-2.0.3

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

【C#设计模式】4.工厂方法模式(Factory Method Pattern)【创建型】

随着需求的变化我们要不停地修改工厂里面的方法的代码,需求变化越多,里面的If–Else–也越多,这样就会造成简单工厂的实现逻辑过于复杂。设计模式是遵循一定原则而得来的,比如,我们要怎么增加代码,怎么修改代码,不是想怎么来就怎么来的,其中一个原则就是OCP原则,中文是【开放关闭原则】,对增加代码开发,对修改代码关闭,所以我们就不能总是这样修改简单工厂里面的方法。......

星Yeah 的博客 4227

设计模式(二、三):创建型之工厂方法模式和抽象工厂模式

需求:设计一个咖啡店点餐系统设计一个咖啡类(Coffee)并定义其两个子类(美式咖啡【AmericanCoffee】和拿铁咖啡【LatteCoffee】)再设计一个咖啡店类(CoffeeStore),咖啡店具有点咖啡的功能具体类的设计如下:这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重假如我们要更换对象,所有new对象的地方都需要修改一遍,这显然违背了软件设计的开闭原则如果我们使用工厂来生产对象,我们就只和工厂打交道就可以了,彻底和对象解耦。

从基础到源码解析的学习记录 1096

Java设计模式-创建型设计模式-工厂方法模式(工厂模式)

Java设计模式-创建型设计模式-工厂方法模式(工厂模式)

Fatter$hday的博客 990

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

文章摘要:工厂方法模式是一种创建型设计模式,通过将对象创建推迟到子类实现解耦。其核心包含抽象产品、具体产品、抽象工厂和具体工厂四个角色,符合开闭原则,支持灵活扩展。文章以Java日志记录器为例展示了实现过程,包括定义接口、实现具体类和客户端使用。该模式适用于产品类型易扩展的场景(如框架扩展、插件开发等),但需注意避免过度设计。与简单工厂相比,工厂方法模式更符合单一职责原则,但会增加类数量。理解这种模式有助于提升代码的可维护性和扩展性。

大志的学习笔记 478

创建型设计模式--工厂方法模式

创建型设计模式是解决对象创建机制的设计模式. 该类设计模式试图根据具体的情况,以适当方式创建对象. 工厂方法的功能: 选择一个类 创建该类的对象 以父类的类型返回该对象 不做其他事情 简单工厂方法模式理论与设计例子(汽车保险介绍程序)静态 GUI的全称为Graphical User Interface,图形化界面或图形用户接口,是指采用图形方式显示的计算机操作环境用户接口。 蓝色的实线代表关联:它使被关联类以类属性的形式出现在使用类中.箭头指向被关联类. PolicyProdu..

qq_58665528的博客 176

23天读懂23种设计模式:工厂方法模式(创建型)

点击上方 蓝字 关注我们创建型模式是用来创建对象的模式,抽象了实例化的过程,帮助一个系统独立于其他关联对象的创建、组合和表示方式。工厂方法模式目的:封装构造对象具体过程,解耦客户端与构造...

Diligence is the mother of success. 275

简单工厂、工厂方法和抽象工厂模式(创建型设计模式)的 C++ 代码示例模板

简单工厂、工厂方法和抽象工厂模式(创建型设计模式)的 C++ 代码示例模板。

夜悊的博客 678

设计模式-创建型设计模式-02.工厂方法(php)

Design Pattern For PHP 设计模式类型 创建型设计模式 设计模式名称 工厂方法 UML角色 应用场景 1、客户端在使用某个产品时,清楚的知道应该使用哪个具体的工厂服务,实例化该具体的工厂,生产出具体的产品来。 2、只需要一种产品,而客户端不想知道也不需要知道究竟哪个工厂生产的,即最终选择哪个具体工厂的决定权在生产者一方,生产者根据当前系统的情况来实例化一个具体的工厂返回给使用者,而这个决策的过程对于客户端来说是透明的。 优缺点 优点 1、利用工厂方法类区创建具体的产品对象,隐藏了具体产

u014354882的博客 259

【设计模式精讲】创建型模式之工厂方法模式(简单工厂、工厂方法)

简单工厂不是一种设计模式,反而比较像是一种编程习惯。简单工厂模式又叫做静态工厂方法模式(static Factory Method pattern),它是通过使用静态方法接收不同的参数来返回不同的实例对象.​ 定义一个工厂类,根据传入的参数不同返回不同的实例,被创建的实例具有共同的父类或接口。(1)需要创建的对象较少。(2)客户端不关心对象的创建过程。封装了创建对象的过程,可以通过参数直接获取对象。

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 1万+

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

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

csdn_tom_168的博客 920
上一篇: VMware Workstation Pro 17 虚拟机安装
下一篇: 创建型设计模式-抽象工厂
#难得糊涂
博客等级 码龄8年 231粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值