设计模式-工厂模式

图像去雨:超详细手把手写 pytorch 实现代码(带注释) 占个坑,过几天来写 阅读详情

        1776年3月,亚当·斯密第一次在《国富论》中第一次提出了劳动分工的观点,其详细阐述了劳动分工对于提高劳动生产率和增加国民财富具有重要的作用。也就是说,如果我们要吃玉米,我们没必要自己去买块地,然后种植、收割;如果我们想穿鞋子,我们也没必要自己买机器,然后买材料、做鞋。原因很简单,如果我们事事亲力亲为,那么我们的时间都被占据了,我们腾不出来时间做其他重要的事情。而且,与专业做鞋子的工人相比,无论款式、还是舒适度,我们都差了一大截。

       因此,社会分工的优势告诉我们,我们只需做好自己所擅长的东西就够了,而对于那些不是自己本职工作的事情,我们就放心交给那个领域的组织就好,而这个组织的最小单位其实就是工厂。

       面向对象其实就是社会学的一个缩影,任何一个设计模式,其实在现实中都有迹可寻,专家们也绝不是靠瞎想诌出来的东西。工厂模式的初衷其实很简单,如果我们需要一个实例,没必要自己是实例化,把new的过程交给工厂不是更好吗?何必事事都得自己来做?

        比如下面的实例:

我们有两台机器,一台用来造鞋子,一台用来造鞋带:

public interface Machine {
    /**
     * 机器用来生产产品
     */
    void produce();
}
public class ShoelaceMachine implements Machine {
    @Override
    public void produce() {
        System.out.println("生产鞋带。");
    }
}

       

public class ShoeMachine implements Machine {
    @Override
    public void produce() {
        System.out.println("生产鞋。");
    }
}

如果,如果自己动手,丰衣足食,那么实现过程是这样的,

public class Main {
    public static void main(String[] args) {
        String type = "shoe";
        if (type.equals("shoe")) {
            Machine machine = new ShoeMachine();
            machine.produce();
        } else if (type.equals("shoelace")) {
            Machine machine = new ShoelaceMachine();
            machine.produce();
        } else {
            // do others
        }
    }
}

也就是说,如果需要鞋子,我们就去生产一双鞋子,如果我们需要鞋带了,我们就去生产一双鞋带。乍眼一看,没什么不好的哇,需要什么,自己去造就好了嘛。可是如果我们需要的东西很多呢?那我们的家里是不是就要挤满了呢?不信你把那个else一直写下去试试,每一个需要生产的人家都来一遍这样的操作,代码冗余度岂不是很大?显然,鞋子和鞋带是大家都需要的东西吗?给他们建个工厂好不好,如果我们需要的话,我们直接去工厂里面拿,会不会更方便呢?一起来建个大工厂,共同搞事业喽。。。

public class ShoeFactory {
    Machine machine = null;

    public static Machine getMachine(String type) {
        if (type.equals("shoe")) {
            return new ShoeMachine();
        } else if (type.equals("shoelace")) {
            return new ShoelaceMachine();
        } else {
            // do others
            return null;
        }
    }
}

接下里,如果我们想要双鞋子呢?直接开口问工厂要喽。。

public class Main {
    public static void main(String[] args) {
        String type = "shoe";
        Machine machine = ShoeFactory.getMachine(type);
        machine.produce();
    }
}

其实,工厂模式在java编程中是很常见的,比如我们常见的连接数据库的操作,常见的数据库有mysql、redis、oracle等,如果都让我们自己连接,我们是不是会针对每一个连接都建立一个connectionManager?哈哈。。或许你已经猜到了,这部分工作可以由JDBC来帮我们做,JDBC就类似于一个连接的工厂。所以,我们最终看到的一种情形就是在配置文件中配置

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

然后,jdbc就会根据入参的不同,自动为我们加载所需要的驱动器。

那么,问题来了,我们什么时候可以使用工厂模式呢?

答案是没人能说得清楚,但是,如果你能预感到某种方法可能会因为某个参数(比如本例中type)的变化而不断的扩展,而且,这个方法在其他地方也会用到。也就是说,工厂生产的东西种类是会不断增加的,而这些东西大家都需要,那么我们便可以尝试使用工厂模式。

【51单片机仿真】基于51单片机设计的多功能电子时钟日历(实时时钟闹钟秒表温度检测)系统__资料编号5 该项目是基于单片机的多功能电子时钟系统,集成了时间显示、闹钟设置、秒表功能以及温度显示等功能。主要硬件包括1602液晶显示屏、DS1302时钟芯片、DS18B20温度传感器和蜂鸣器。系统通过按键进行时间和闹钟的设置,并实时显示当前时间和温度。 阅读详情

相关推荐

车辆TBOX科普 第69次 TBOX行业发展趋势与就业前景深度解析

TBOX技术革新驱动汽车智能化发展 Telematics BOX(TBOX)正快速从车辆状态监控器进化为整车智能核心,市场年增速超25%,2025年规模将达150亿美元。技术呈现四大革新方向:5G与V2X集成实现多模通信网关,支持10-20Gbps高速传输;多模GNSS融合定位精度达厘米级,北斗系统提供独特优势;边缘计算架构使TBOX具备本地AI处理能力,减少95%数据上传;硬件安全模块(HSM)成为标配,满足EVITA标准的安全需求。这些技术突破正重塑TBOX架构,使其从单纯通信管道升级为智能网联汽车的关

IT深耕十余载,大道之简 1820

Java设计模式——工厂模式

本文对设计模式中工厂模式进行思想和原理的讲解,引用实际例子来方便理解。

weixin_56032340的博客 8632

Coze知识库搭建:智能化管理与高效检索实践

知识管理系统是现代企业信息资产管理的核心基础设施,其核心原理是通过结构化存储和智能检索技术实现知识的快速流转。在技术实现上,基于NLP的语义理解引擎和知识图谱构建是关键,能够显著提升检索准确率和知识关联性。以Coze平台为例,其针对中文场景优化的分词算法和多模态处理能力,可有效解决技术文档管理中的术语识别和格式兼容问题。这类系统在开发团队知识沉淀、新员工培训等场景中价值显著,特别是当集成RBAC权限模型和自动化备份策略后,既能保障信息安全,又能实现持续的知识迭代。通过合理配置同义词扩展和权重调整,可使搜索命

weixin_29041195的博客 260

设计模式之工厂模式

工厂模式 1、简单工厂模式 1.1、定义 简单工厂模式(Simple Factory Pattern)是指有一个工厂对象决定创建出哪一种产品类的实例,不属于23种设计模式。 简单工厂是产品的工厂 1.2、应用场景 简单工厂模式适用于工厂类创建的对象较少的场景,且客户端只需要传入工厂参数,对如何创建对象的逻辑不需要关心。 1.3、缺点 工厂类的职责相对过重,增加新的产品时需要修改工厂类的判断逻辑,违背了开闭原则。 不易于扩展过于复杂的产品结构。 1.4、实例 支付接口规范: public interface

aaa31203的博客 16万+

gesp c++ 八级知识点

gesp c++ 八级知识点

MMD.然大大 2233

raw_count、tpm、fpkm、rpkm如何选择

转录组测序中常见的数据类型有:raw_count、tpm、fpkm、rpkm。本文进行简单辨析: 一、概念 1 raw_count RNA-seq数据中,raw_count一般是指mapped到基因外显子区域的reads数目。比如说htseq,STAR,或者RSEM等NGS分析流程计算产生的counts值。其中RSEM(RNA-Seq by Expectation-Maximization),考虑到一条read 可能会匹配多个exon位置,故而其产生的为expected_count。 2 TPM

weixin_59289660的博客 1万+

设计模式之【工厂模式】详解

工厂模式提供了一种创建对象的方式,而无需指定要创建的具体类。通过使用工厂模式,可以将对象的创建逻辑封装在一个工厂类中,而不是在客户端代码中直接实例化对象,这样可以提高代码的可维护性和可扩展性。在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需要修改一遍,这显然违背了软件设计的开闭原则。

Shine19的博客 1143

Hi3516CV610 YOLOv8模型转换与部署实战:从源码到板端推理全流程解析

本文详细解析了将YOLOv8模型部署到Hi3516CV610开发板的全流程。内容涵盖从Ubuntu环境搭建、模型获取与验证,到关键的PyTorch模型转换为ONNX格式,并利用海思工具链量化生成板端可执行的.wk文件。最后,指导开发者编写板端C程序,完成视频流处理、NNIE推理及结果后处理,并提供了部署调试与性能优化的实用技巧。

weixin_29215815的博客 266

工厂设计模式

简单工厂模式(静态工厂模式)虽然不符合设计原则,但是使用方便,实际使用最多工厂方法模式不修改已有类的前提下,通过增加新的工厂类实现扩展抽象工厂模式不可以增加产品,但可以增加产品族应用场景JDK中Calendar的getInstance方法JDBC中的Connection对象的获取Spring中IOC容器创建管理的bean方法反射中Class对象的newInstance方法。

学习总结 1484

十四种逻辑器件综合对比——《器件手册--逻辑器件》

逻辑器件是数字电路中最基本的逻辑单元,用于实现基本的逻辑运算,如与、或、非、异或等。逻辑门根据输入信号的组合产生相应的输出信号。与门:只有当所有输入信号都为高电平时,输出才为高电平。或门:只要有一个输入信号为高电平,输出就为高电平。非门:输出信号与输入信号相反。异或门:当两个输入信号不同时,输出为高电平;相同则输出为低电平。用于对输入信号进行反相操作,即将高电平转换为低电平,低电平转换为高电平。常用于信号的反相处理和逻辑电平的转换。

XU157303764的博客 2025

11、系统稳定性分析与李雅普诺夫函数的应用

本文深入探讨了李雅普诺夫函数在系统稳定性分析中的核心作用,重点介绍了时变与时不变系统的稳定性判据差异,以及巴尔巴拉特引理在处理非自治系统中的应用。文章还阐述了正线性系统与严格正实传递函数的性质及其在非线性控制系统中的重要性,并展示了李雅普诺夫函数在评估主导时间常数和设计快速干扰抑制控制策略方面的实际应用。通过具体示例和流程图,系统地总结了李雅普诺夫方法在稳定性分析、性能评估与控制器设计中的多维度价值,同时指出了当前挑战与未来发展方向。

Jerry的专栏 93

设计模式——工厂模式

工厂模式 在《Head First 设计模式》一书中,一共介绍了一种类似于工厂模式的编程习惯、两种工厂模式,在这篇文章中,我将对它们分别进行介绍,下面首先来看一下简单工厂。 1、简单工厂 按照惯例,我们应该先介绍一下简单工厂的定义,然后举例说明,这一次,我们不这样做,我们首先举例说明,然后再引出简单工厂的定义,后续两个工厂模式均按此方式进行叙述,从案例中理解模式的定义才能够更加印象深刻。...

记录只为更好地前行 4883

智能车图像处理9-进阶篇1--中线的提取

(1)10-50行 基础扫线 (2)56-71 断行0 ,就是比如遇到十字,十字路口下方 第一次断线的地方。 (3)83-124 按照原先有效行,拟线作为中值,然后从中值向左右扫线,同时计算赛道宽度。 (4)125-138 如果出现赛道宽度小于先前有效行,则找到二次扫线的起点,从二次扫线起点处,继续向下扫线,直至结束,同时记录最后的有效行。 (5) 310-- 最后计算左右边线类似于方差的值,用于环岛的判断 ***这里着重描述一下二次扫线,希望大家可以理解的深刻

taiyuezyh的博客 1万+

【设计模式】之工厂模式(三种)

今天给大家介绍23种设计模式中的工厂模式,学过Spring的小伙伴应该不陌生,今天给大家详细介绍一下它。🌈

小杰不秃头的博客 2323

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

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

1.简单工厂设计模式 代码 Video package Factory.简单工厂; public abstract class Video { public abstract void product(); } JavaVideo package Factory.简单工厂; public class JavaVideo extends Video { public voi...

codeDonald的博客 222

NTscan扫描工具

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

《C#设计模式》 工厂三兄弟之 【简单工厂模式】,【工厂方法模式】,【抽象工厂模式】

《C#设计模式》 三种工厂设计模式 【简单工厂模式】 【工厂方法模式】 【抽象工厂模式】 第一种:简单工厂模式 一:【简单工厂模式】 简单工厂模式概念(Simple Factory Pattern):定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简...

TimTiny的博客 2590

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【iOS】——工厂设计模式

这种模式旨在为创建对象提供一个统一的接口,隐藏了创建对象的具体逻辑,使得客户端不需要知道所创建对象的具体类,从而降低了对象之间的耦合度,提高了代码的灵活性和可维护性。它为创建对象提供了一种灵活的方式,让子类来决定实例化哪一个类,从而实现了对象创建的延迟化和抽象化,增强了代码的扩展性和可维护性。车没了,该车的引擎和轮胎自然也没了。当系统中加入新产品时,不需要修改抽象工厂和抽象产品提供的接口,也无须修改客户端和其他的具体工厂和具体产品,而只要添加一个具体工厂和与其对应的具体产品就可以了,符合了“开-闭”原则。

m0_73974920的博客 1675

设计模式之工厂模式与抽象工厂模式

工厂模式和抽象工厂模式 在设计模式里面,我们发现了其实工厂模式贺抽象工厂模式是单独分开的两个设计模式,接下来我们去探索一下他们呢得不同之处叭! 工厂模式的分类: 简单工厂模式 用来生产同一等级结构中得任意产品(对于增加新得产品,需要修改已有代码) 工厂方法模式 用来生产同一等级结构中得固定产品(支持增减任意产品) 抽象工厂模式 围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂得工厂 核心本质 实例化对象不使用new,用工厂方法代替 将选择实现类,创建对象同意管理和控制

qq_43325476的博客 2398

设计模式—工厂设计模式

工厂设计模式1.概述2.简单工厂模式2.1 结构2.2 实现2.3 优缺点2.4 扩展3.工厂方法模式3.1 概述3.2 结构3.3 实现3.4 优缺点4.抽象工厂模式4.1 概述4.2 结构4.3 实现4.4 优缺点4.5 应用场景5.扩展模式5.1 第一步:定义配置文件5.2 改写工厂类6.JDK源码解析—Collection.iterator方法 1.概述 在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需

洛晓关的博客 1462

【深入理解设计模式】 工厂设计模式

工厂设计模式是一种创建型设计模式,它提供了一种在不指定具体类的情况下创建对象的接口。在工厂设计模式中,我们定义一个创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

guojiaqi_的博客 1559
上一篇: 分布式系统需满足CAP原理
下一篇: Math.abs一定是正数吗?
心潮逐浪
博客等级 码龄15年 5粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值