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

java工厂设计模式之简单工厂 java工厂设计模式之简单工厂实例以及介绍,程序已经运行过能正常跑通 立即下载

业务场景:工作中要开发电子发票模块,但是市场上的电子发票平台有很多,经过调研发现他们的功能都是开票,实现接口和配置信息有很大的区别。所以想到了工厂模式。

为什么想到工厂模式,可以从场景中获取自己的理解。 设计模式本身更多的是为了实现设计原则。

工厂模式简介:设计模式三大类之创建型模式。

模型确立:

工厂——(生产)——发票公司

发票公司——(功能)——开发票

工厂选择:目前是确定俩家公司,不排除之后会增加其他公司。最终选择抽象工厂实现。

首先确认下开开票公司的功能

public interface InvoiceCompany {
    //开发票
    void makeInvoice();
}

目前由俩个 公司来实现开票

public class InvoiceCompanyA implements InvoiceCompany {

    @Override
    public void makeInvoice() {
        System.out.println("公司A开出了发票");
    }
}


public class InvoiceCompanyB implements InvoiceCompany {

    @Override
    public void makeInvoice() {
        System.out.println("B公司开出了一张发票");
    }
}

下面来介绍一下工厂的种类及实现:

  1. 普通工厂
public class SimpleFactory {
    //生成公司A
    public InvoiceCompany getInvoiceCompanyA() {
        return new InvoiceCompanyA();
    }
    //生成公司B
    public InvoiceCompany getInvoiceCompanyB() {
        return new InvoiceCompanyB();
    }
}

测试

public class SimpleFactoryTest {
    public static void main(String[] args) {
        SimpleFactory simpleFactory = new SimpleFactory();
        InvoiceCompany invoiceCompanyA = simpleFactory.getInvoiceCompanyA();
        invoiceCompanyA.makeInvoice();
    }
}



输出结果:公司A开出了发票

2. 静态工厂(简单工厂的基础上静态工厂方法)

public class StaticFactory {

    //生成公司A
    public static InvoiceCompany getInvoiceCompanyA() {
        return new InvoiceCompanyA();
    }
    //生成公司B
    public static InvoiceCompany getInvoiceCompanyB() {
        return new InvoiceCompanyB();
    }
}

测试

public class StaticFactoryTest {
    public static void main(String[] args) {
        InvoiceCompany invoiceCompanyA = StaticFactory.getInvoiceCompanyA();
        invoiceCompanyA.makeInvoice();
    }
}


输出结果:公司A开出了发票

3. 抽象工厂(将工厂方法抽象)

public interface AbstractFactory {
    //生产开票公司
    InvoiceCompany getInvoiceCompany();
}

//创建只生产公司A的工厂
public class InvoiceCompanyAFactory implements AbstractFactory {
    @Override
    public InvoiceCompany getInvoiceCompany() {
        return new InvoiceCompanyA();
    }
}
//创建只生产公司B的工厂
public class InvoiceCompanyBFactory implements AbstractFactory {
    @Override
    public InvoiceCompany getInvoiceCompany() {
        return new InvoiceCompanyB();
    }
}

测试

public class AbstractFactoryTest {
    public static void main(String[] args) {
        AbstractFactory abstractFactory = new InvoiceCompanyAFactory();
        InvoiceCompany invoiceCompany = abstractFactory.getInvoiceCompany();
        invoiceCompany.makeInvoice();
    }
}


输出结果:公司A开出了发票

总结:虽说是三种工厂,感觉普通工厂上场机会不是太多,由上可以看出静态更像是普通工厂的一种纯加强。而抽象工厂就比较厉害了,他可以很好地实现开闭原则。如果新加入公司C可以再创建一个C工厂而不需动源代码。如果是静态工厂的话不可避免需要修改源代码。

——实现一个功能的方法有多种,学会思考最优解才能不断进步。

MEME-CHIP实战:5步搞定ChIP-seq数据中的motif发现与可视化 本文提供了使用MEME-CHIP工具进行ChIP-seq数据motif发现与可视化的完整实战指南。通过5个清晰步骤,从数据准备、环境搭建、命令行执行到结果解读与高级可视化,详细讲解了如何利用MEME-CHIP工作流高效完成从原始peak序列到发表级motif图的分析,并分享了关键的参数调优与避坑经验。 阅读详情

相关推荐

神联动:LSTM+卡尔曼滤波!一区大门轻松开!

近来热度飙升,成为时间序列预测和状态估计等领域的香饽饽,非常好发高区!主要在于:这两者结合,不仅能提高模型预测准确性;还能拓展应用场景,为我们的论文创新提供发挥空间,且当下还在蓝海阶段,还不算卷。具体点说:卡尔曼滤波擅长处理线性状态估计和噪声,能使LSTM更好地适应动态环境的变化,减少噪声干扰,降低预测误差。而LSTM通过捕捉长期依赖关系,擅长处理非线性时间序列,能够弥补卡尔曼滤波在这方面的不足,从而把应用场景从传统的状态估计,延伸到金融预测、工业检测、自动驾驶等任务。

2401_82426425的博客 2210

设计模式之工厂模式

简单工厂模式

m0_62127837的博客 277

同花顺【红绿趋势】幅图指标 源码分析

a10:IF(差值<=0 ,0 ,差值*0.2 ,4 ,0),STICK,linethick5,colorred;a7:IF(差值<=0 ,0 ,差值*0.8 ,4 ,0),STICK,linethick5,colorred;a8:IF(差值<=0 ,0 ,差值*0.6 ,4 ,0),STICK,linethick5,colorred;a6:IF(差值<=0 ,0 ,差值*1 ,4 , 0),STICK,linethick5,colorred;DRAWICON(先锋<0,-25,1);

zhibiaogong的博客 4071

设计模式------三种工厂模型详解

在学习servlet+jsp开发项目的时候,会用到工厂模型,我刚刚一查居然是3种。我参考了两个文章,然后总结了该文。有需要的朋友可以查看这两篇文章。代码提供:http://www.iteye.com/topic/1145602文档提供:https://blog.youkuaiyun.com/lingfengtengfei/article/details/12374469注意:其中的图片和代码不是配套的。所以请...

qq_36098284的博客 5587

别再对着数据手册发愁了!用HFSS 2023 R2搞定ESP32-C3板载天线的阻抗匹配

本文详细介绍了如何利用HFSS 2023 R2进行ESP32-C3板载天线的阻抗匹配优化,解决实际PCB设计中常见的性能偏差问题。通过智能模型导入、科学参数扫描和量化优化流程,显著提升天线性能,适用于WIFI和蓝牙应用场景。

weixin_42523543的博客 448

保姆级教程:用STM32标准库搞定TIM1的PWM输出(附完整代码和避坑点)

本文提供STM32F103高级定时器TIM1的PWM输出保姆级教程,涵盖从工程搭建到完整代码实现的详细步骤。重点解析TIM1作为高级定时器的特殊配置要点,包括时钟初始化、PWM通道设置和GPIO复用功能,并附常见问题排查指南和动态调整占空比的实用技巧,帮助开发者高效实现精准PWM控制。

weixin_30673611的博客 433

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

工厂模式

Guo_Liwei的博客 484

告别远程控制弹窗:免Root实现投射与录制敏感信息自动授权

本文针对Android远程控制中频繁出现的‘在投射和录制时显示敏感信息’弹窗问题,提供了一套免Root的自动化解决方案。通过结合Shizuku与App Ops两款工具,无需破解系统即可静默授予屏幕投射与录制权限,从而实现稳定、无干扰的远程协助、家庭监控或自动化测试,彻底告别手动授权弹窗的烦恼。

qsc9012345的博客 723

重温设计模式--工厂模式(简单、工厂、抽象)

工厂方法模式(Factory Method Pattern):在简单工厂模式上进行了改进,把具体产品对象的创建方法延迟到具体的工厂子类中实现,工厂类变成抽象类,有一个抽象的创建方法,每个具体的工厂子类负责创建对应的具体产品对象,符合开闭原则(对扩展开放,对修改关闭)。具体产品(Concrete Product):实现抽象产品族中的相应抽象产品类,代表具体的产品对象,不同的具体工厂创建不同组合的具体产品。工厂类(Factory):负责创建具体的产品对象,根据传入的条件或者参数决定实例化哪种具体产品。

doubleintfloat的博客 1866

YOLO11改进 | 主干网络 | 添加Hyper-YOLO的MANet混合聚合网络

本文详细介绍了在YOLO11目标检测模型中替换C3k2模块为MANet的具体实现方法。文章首先讲解MANet模块的原理,然后分步骤指导如何在YOLO11中添加该模块,包括代码修改、文件配置和模型注册等关键环节。通过实验对比,改进后的YOLO11_MANet模型在保持8.8GFLOPs计算量的同时,参数数量达到3,820,272,网络层数增加到343层。文章还提供了完整的代码实现和网络结构图,并建议结合其他注意力机制或损失函数进一步提升检测效果。最后推荐了相关的深度学习专栏,包含更多YOLO系列改进方法。

kay_545 660

越野换了逐飞的ips200pro的屏幕后代码烧录中报错: “Cannot initialize device connection” 和 “Flashing failed” ...如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1152

设计模式-工厂模式

工厂模式定义:这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式、在工厂模式中,我们在创建对对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。简单来说,使用了c++多态的特性,将存在继承关系的类,通过一个工厂类创建对应的子类(派生类)对象。在项目复杂的情况下,可以便于子类对象的创建。工厂模式的实现方式可分为简单工厂模式、工厂方法模式、抽象工厂模式,每个实现方式都存在优和劣。具体的情况: 鞋厂可以指定生成耐克、阿迪达斯和李宁牌子的鞋子。哪个鞋炒的火爆,

m0_37715028的博客 6695

lp–mspm0g3507开发板进入低功耗模式怎么退出?烧程序烧着烧着就进来了,跳线帽没动过,且报错:Texas Instruments Debugger Error: DAP Co...如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 1571

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

📒工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它通过定义一个创建对象的接口来让子类决定实例化哪一个类,使得一个类的实例化延迟到其子类。这种模式的核心思想是将对象的创建过程推迟到子类,从而实现更灵活、更可扩展的代码。// 抽象产品 - 文档。

李赛赛的专栏 1415

怀旧版电脑GBC模拟器

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

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

秒懂设计模式之工厂方法模式(Factory Method Pattern)

The essence of the Abstract Factory Pattern is to “Provide an interface for creating families of related or dependent objects without specifying their concrete classes.”.[5] abstract factory

ShuSheng007的程序人生 5225

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

23种设计模式之工厂方法模式(Factory Method Pattern)

本篇文章将23种设计模式中的工厂方法模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。

小威的博客 2万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

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

weixin_45226668的博客 1082

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

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

Meteors.的博客 1381

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

工厂方法模式是一种创建型设计模式,主要解决对象创建的问题。它的核心思想是:把对象的创建和使用分离,让使用者不直接依赖具体类,而是通过工厂来获得对象。

TechNomad的博客 1017

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

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

在未来等你的专栏 1217

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

工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它提供了一种创建对象的接口,但实际创建对象的工作由子类完成。这种模式的主要目的是降低类之间的耦合度,增强类的独立性,并提高系统的可维护性和可扩展性。工厂方法模式的主要特点(1)分离了算法和对象创建:通过工厂方法,我们可以将对象的创建和使用分离,使得代码更加清晰和易于维护。(2)实现多态:工厂方法允许子类实现自己的行为,从而支持不同的创建策略。(3)避免使用new关键字:工厂方法模式通过工厂方法代替new关键字,可以减少错误。

giser@2011的博客 1434

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

定义一个创建对象的接口,但由子类决定需要实例化那一个类。(工厂模式是我们常用的实例化对象模式了,是用工厂方法代替new 操作的一种模式,简单工厂的特点就是“简单粗暴”,通过一个含参的工厂方法,我们可以实例化任何产品类。:工厂方法模式中,具体的工厂只是生产具体的某一个产品。而抽象工厂模式的具体的工厂可以生产族产品(例如奔驰轿车、奔驰SUV、奔驰MPV)。抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对的是一种产品的继承结构,而抽象工厂模式需要面对多个产品的继承结构。

qq_57198771的博客 1719

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

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

Ysunflower的博客 408

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

C#设计模式之二工厂方法模式(Factory Method Pattern)【创建型】 原文:C#设计模式之二工厂方法模式(Factory Method Pattern)【创建型】 一、引言 在上一篇文章中我们讲解了过渡的一种模式叫做【简单工厂】,也有叫【静态工厂】的,通过对简单工厂模式得了解,我们也发现了它的缺点,就是随着需求的变化我们要不停地修改工厂里面的方法的代码,需求变...

LJianDong的博客 685

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

设计模式 工厂方法模式(Factory Method Pattern) 一、简述 工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪个类。将创建过程延迟到子类进行。 对比简单工厂模式:(简单举例) 简单工厂模式是客户端将需求参数传递给产品工厂,产品工厂返回对应的产品实例对象给客户端; 工厂方法模式是不同的产品由不同的工厂生产,客户端想要A产品,自己找A工厂创建,客户端想要B产品,就自己找B工厂创建。 例子打包:外...

Genven_Liang的博客 444

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

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

星Yeah 的博客 4227
上一篇: 算法——冒泡排序
下一篇: Java8新特性——接口的默认方法(或扩展方法)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值