一文教你如何实现工厂模式和抽象工厂模式

Java实现抽象工厂模式 抽象工厂模式提供一个创建一系列相关或者相互依赖对象的接口。 阅读详情

设计模式在软件工程中用于解决常见的软件设计问题。工厂模式和抽象工厂模式是创建型设计模式中最常用的模式之一,它们用于创建对象,而不必暴露创建对象的逻辑。

本文中将详细介绍如何在Python中实现这两种模式。

工厂模式

工厂模式定义了一个创建对象的接口,但让子类决定要实例化的类是哪一个。工厂方法让类的实例化推迟到子类中进行。

步骤 1: 定义产品接口

首先定义一个产品接口,所有的产品类都应该实现这个接口。

class Product:
    def use(self):
        pass

步骤 2: 创建具体产品类

根据产品接口创建具体的产品类。

class ConcreteProductA(Product):
    def use(self):
        return "Inside ConcreteProductA's use() method."

class ConcreteProductB(Product):
    def use(self):
        return "Inside ConcreteProductB's use() method."

步骤 3: 定义工厂接口

定义一个工厂接口,提供一个创建对象的方法。

class Creator:
    def factory_method(self):
        pass

步骤 4: 实现具体工厂

实现具体的工厂类,用于创建具体产品的实例。

class ConcreteCreatorA(Creator):
    def factory_method(self):
        return ConcreteProductA()

class ConcreteCreatorB(Creator):
    def factory_method(self):
        return ConcreteProductB()

步骤 5: 使用工厂

最后,根据需要使用具体的工厂创建产品实例。

creator = ConcreteCreatorA()
product = creator.factory_method()
print(product.use())  # 输出: Inside ConcreteProductA's use() method.

抽象工厂模式

抽象工厂模式提供了一个接口,用于创建相关或依赖对象的家族,而不需要指定具体类。

步骤 1: 定义抽象产品

定义多个抽象产品,表示一系列相关或依赖的对象。

class AbstractProductA:
    def use(self):
        pass

class AbstractProductB:
    def interact(self, productA):
        pass

步骤 2: 创建具体产品类

根据抽象产品创建具体产品类。

class ProductA1(AbstractProductA):
    def use(self):
        return "The result of product A1."

class ProductB1(AbstractProductB):
    def interact(self, productA):
        return f"The result of B1 interacting with ({productA.use()})"

class ProductA2(AbstractProductA):
    def use(self):
        return "The result of product A2."

class ProductB2(AbstractProductB):
    def interact(self, productA):
        return f"The result of B2 interacting with ({productA.use()})"

步骤 3: 定义抽象工厂

定义抽象工厂接口,包含创建一系列相关或依赖对象的方法。

class AbstractFactory:
    def create_product_a(self):
        pass

    def create_product_b(self):
        pass

步骤 4: 实现具体工厂

实现具体的工厂类,每个工厂负责创建一系列产品。

class ConcreteFactory1(AbstractFactory):
    def create_product_a(self):
        return ProductA1()

    def create_product_b(self):
        return ProductB1()

class ConcreteFactory2(AbstractFactory):
    def create_product_a(self):
        return ProductA2()

    def create_product_b(self):
        return ProductB2()

步骤 5: 使用抽象工厂

最后,使用具体的工厂创建一系列相关或依赖的对象。

factory1 = ConcreteFactory1()
productA1 = factory1.create_product_a()
productB1 = factory1.create

_product_b()
print(productB1.interact(productA1))  # 输出: The result of B1 interacting with (The result of product A1.)

factory2 = ConcreteFactory2()
productA2 = factory2.create_product_a()
productB2 = factory2.create_product_b()
print(productB2.interact(productA2))  # 输出: The result of B2 interacting with (The result of product A2.)

对比

下表对比了工厂模式和抽象工厂模式的主要特点、优点、缺点以及适用场景,帮助更好地理解它们之间的差异:

特性工厂模式抽象工厂模式
目的提供一个创建对象的接口,将对象的实例化延迟到子类提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类
实现复杂度较低较高
适用场景当创建对象的逻辑比较简单时;当系统需要增加产品的种类时,而不是产品等级结构时当需要创建的对象是一系列相关或相互依赖的家族时;当系统中的产品族需要扩展,而不需要增加新的产品等级结构时
产品结构通常用于创建单一产品用于创建产品族
如何扩展添加新的具体工厂类添加新的产品族需要扩展抽象工厂接口和所有具体工厂类,增加新的产品等级结构相对容易
客户端如何使用客户端需要知道它们使用的具体工厂类客户端通过抽象接口操作实例,不需要知道具体工厂类
优点简化了对象的创建过程,降低了客户端与具体产品之间的耦合度可以确保同一产品族中的对象是兼容的;隔离了具体类的生成,使得客户端和具体类的实现解耦
缺点当产品种类非常多时,会增加代码维护的复杂度当产品族中需要增加新的产品时,所有的工厂类都需要进行修改,违反了开闭原则;使得系统中类的个数成倍增加,增加了系统的复杂度和理解难度

可以看出,工厂模式适合那些产品种类较少而产品等级结构较多的情况,而抽象工厂模式则适合需要操作多个产品族中产品的情况。选择哪一种模式主要取决于你的具体需求以及你希望如何组织系统中的对象创建逻辑。

结尾

工厂模式和抽象工厂模式在Python中的实现展示了如何封装对象的创建过程,使得系统更加模块化,降低了组件间的耦合度。通过使用这些模式,可以在增加新的产品或产品族时,使得代码更加灵活和可扩展。理解并掌握这些设计模式,对于设计和实现复杂系统具有重要意义。

---------------------------END---------------------------

题外话

感谢你能看到最后,给大家准备了一些福利!

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。


👉优快云大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img

二、Python兼职渠道推荐*

学的同时助你创收,每天花1-2小时兼职,轻松稿定生活费.
在这里插入图片描述

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

👉优快云大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

若有侵权,请联系删除

Java中工厂模式与抽象工厂模式的实现 工厂模式是软件开发中最为常用的设计模式之一。它提供了一种创建对象的最佳方式,在面向对象编程中,当创建复杂对象的逻辑与使用对象的逻辑分离时,工厂模式就显得非常有用。工厂模式主要解决了两个问题:一是创建与使用相分离,二是降低系统的耦合度。工厂模式体现了开闭原则(Open-Closed Principle),即软件实体应当对扩展开放,对修改关闭。通过接口或抽象类,可以定义创建对象的逻辑,并且使得客户端代码与实现类解耦。 阅读详情

相关推荐

Hifiasm参数调优实战:当N50不理想时的7个排查方向与解决方案

本文详细解析了Hifiasm参数调优实战,针对基因组组装中N50不理想的7个排查方向与解决方案。通过调整--hom-cov、-D、-N等核心参数,结合HiFi数据和参考基因组分析,有效提升组装质量。文章以猪毛菜基因组为例,展示了从2.1MB到4.3MB的N50优化过程,为生物信息学研究者提供实用指南。

weixin_30642561的博客 426

工厂模式之3种实现方式

目录(一) 工厂模式概述(二) 简单工厂模式(三) 工厂方法模式(四) 抽象工厂模式(五) 总结 (一) 工厂模式概述 工厂模式: 是Java中最常用的设计模式之一, 它提供了一种创建对象的最佳方式. 在工厂模式中, 我们在使用工厂类创建对象时 不会对客户端暴露 创建逻辑, 并且是通过使用一个共同的接口来指向新创建的对象 (二) 简单工厂模式 简单工厂模式: 定义一个创建对象的工厂类, 由工厂类决定创建出哪一种对象的实例, 工厂类内部已封装创建出哪一种对象的实例的逻辑代码 Phone 手机接口 inter

Admin_Lian的博客 1334

从“要啥”到“咋测”:手把手拆解Aspice SWE.1需求分析,为你的车载/嵌入式项目避坑

本文深入解析Aspice SWE.1需求分析在车载/嵌入式项目中的关键作用,帮助开发者将模糊的系统需求转化为可执行、可验证的软件需求。通过实战案例和结构化方法,详细拆解功能需求原子化、非功能需求工程化表达等核心技巧,为项目避坑提供实用指南。

weixin_31682031的博客 259

工厂模式的实现(Java)

1、概述

catch_dreamer的博客 3029

保姆级教程:用SAP PS管理电梯/大型设备项目(ETO/ATO模式)从成本收集到开票结算

本文详细解析了SAP PS模块在ETO/ATO项目中的全流程成本管理实践,特别针对电梯/大型设备制造行业。从成本收集到开票结算,通过WBS元素、网络活动等核心架构设计,结合F-02、CJ20N等事务代码,实现设计、生产、物流及现场服务各阶段的精准成本控制,助力企业提升项目利润率与财务效率。

weixin_30444105的博客 457

SAP成本核算-事中控制(成本对象控制/成本归集与结算)

本文详细介绍了SAP系统中工单成本归集与结算的全流程管理。主要内容包括:1)工单成本三阶段归集(投料、报工、入库)的具体操作与计算方法;2)工单实际成本结算七步骤:从实际费用归集、成本分割、作业价格计算到差异结算的全过程;3)关键注意事项如测试运行验证、价格单位确认、无在制品处理等。通过标准价计算、实际作业重估等机制,系统实现了生产成本从计划到实际的精确核算,最终生成财务所需的差异结算凭证。所有操作均提供单工单和批量处理两种方式,满足不同业务场景需求。

小九啥也不会 1364

【二】python工厂模式

在面向对象编程中,术语“工厂”表示一个负责创建替他类型对象的类。通常情况下,作为一个工厂的类有一个对象以及与它关联的多个方法。客户端使用某些参数调用此方法,之后,工厂会据此创建所需类型的对象,然后将它们返回给客户端。工厂模式在实际的应用场景举例:假如有一个消息通知的功能,需要实现根据不同的消息内容发送到邮件、微信等渠道。我们就可以利用工厂模式来进行解耦,以后如果新增了短信等其他通知方式,就可以轻松应对,对原有代码侵入较低,可以方便的进行扩展功能。

勿忘初心方得始终 4630

YOLOv8交通监控全方案:精准车辆计数+违章(闯红灯/压线)识别,拿来就落地!

作为深耕计算机视觉落地的开发者,我见过太多交通监控的“伪智能”——传统系统要么车辆计数不准(漏计/重复计数),要么违章识别滞后(靠人工回看录像),甚至连“闯红灯、压线”这类常见违章都无法实时判定,完全满足不了实际交通管理需求。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 646

Go和Java实现抽象工厂模式

Go和Java实现抽象工厂模式

YIYIYI 1583

scratch绘制旋转彩球 2023年9月电子学会图形化编程scratch编程等级考试四级真题和答案解析

​ scratch绘制旋转彩球 2023年9月电子学会图形化编程Scratch等级考试四级真题 一、题目要求 1、准备工作 (1)删除小猫角色,从角色库选择Ball角色; (2)默认空白背景。 ​

青少年编程学习指导 1369

Unity-RetargetPro3-动画插件试用

一个名气大于实战的插件。

大话程序员 711

设计模式之工厂模式 三种工厂模式的实现方式

什么是工厂模式? 工厂模式就是将对象的创建交由工厂来实现,程序只管使用其中具体的方法即可。 我们为什么要使用工厂模式? 1.将对象的创建和对象的使用分开,降低耦合度,提供代码重复利用率; 2.后期对于创建对象的修改成本小。 虽然工厂模式有这么优势,但是并不是所有的场景都适用于工厂模式。我们总不能把所有的需要创建对象的地方都换成工厂模式吧?那就有点为了使用设计模式而使用工厂模式了。 那么...

liufangbaishi2014的博客 2064

Python学习第32天:Web前端入门

本文介绍了Web前端开发三大核心技术:HTML、CSS和JavaScript。首先概述了HTML的发展历程和HTML5新特性,详细讲解了常用HTML标签如文本、列表、链接、图像、表格、表单等。其次介绍了CSS的基础语法、选择器、颜色字体设置、盒子模型和布局定位方法。最后简要提及JavaScript为网页添加交互功能的作用。文章为Python开发者提供了前端技术的基础知识,帮助理解网页的结构、样式和行为实现原理。

tigerhhzz的博客 1911

工厂模式和抽象工厂模式

工厂模式定义了一个创建对象的接口,但由子类来确定要实例化哪个类。工厂方法让类把实例化推迟到子类;抽象工厂模式提供一个接口来创建相关或依赖对象的家族,而不需要指定具体类

chenduwei的博客 2390

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

工厂模式与抽象工厂模式

工厂模式 模式定义: 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟到子类 作用:实现了创建者和调用者的分离 详细分类:  简单工厂模式  工厂方法模式  抽象工厂模式 核心本质:  实例化对象不使用new,用工厂方法代替  将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。 三种模式: ◆简单工厂模式  用来生产同一等级结构中的任意产品(对于增加新的产品,需要修改已有代码),不满足开闭原则 ◆工厂方法模式  用来生产同一等级结构

qq_41784749的博客 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【设计模式】一文带你搞懂什么是“工厂模式”和“抽象工厂模式”

本系列带你系统学习Java中的设计模式

Liu_y_xin的博客 2811

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Python实现工厂模式和抽象工厂模式

首先定义一个产品接口,所有的产品类都应该实现这个接口。pass定义一个工厂接口,提供一个创建对象的方法。pass定义多个抽象产品,表示一系列相关或依赖的对象。passpass定义抽象工厂接口,包含创建一系列相关或依赖对象的方法。passpass。

aobulaien001的博客 1487

工厂模式和抽象工厂模式的实验报告

需要支持多个产品变体:在需要支持不同变体的情况下,例如不同地区的怪物、不同类型的用户界面组件等,抽象工厂模式可以有效管理这些变体。框架设计:在设计框架或库时,抽象工厂模式可以为用户提供灵活的产品创建接口,用户可以根据需要实现具体的工厂类。产品族的创建:当系统需要创建一组相关或相互依赖的产品时,使用抽象工厂模式可以确保产品的一致性和完整性。需要解耦的系统:当需要将产品的创建与使用分离,减少系统之间的耦合度时,抽象工厂模式是一个理想的选择。扩展抽象工厂类和所有相关的具体工厂类和具体产品类。

m0_74289471的博客 1395

C++:浅谈工厂模式与抽象工厂模式

C++:浅谈工厂模式与抽象工厂模式标签: C++ 工厂模式 抽象工厂模式by 小威威之前写过一篇谈模式的文章:单例模式接下来我将浅显的谈谈工厂模式与抽象工厂模式。工厂模式与抽象工厂模式虽有差异,但实现的目的可以看成一致的:They offers the interface for creating a family of related objects, without explicitly spe

linwh8的博客 5739

工厂方法模式和抽象工厂模式

but。

yandong634的专栏 1207

对抽象工厂模式的理解

小明家新开了两个工厂用来生产家具,一个生产现代风格的沙发和椅子,一个生产古典风格的沙发和椅子,现在工厂收到了一笔订单,请你帮他设计一个系统,描述订单需要生产家具的信息。接下来的 N 行,每行输入一个字符串,字符串表示家具的类型。家具类型分为 “modern” 和 “classical” 两种。对于应用层,需要操作按钮和复选框,前提是获取对应的对象。而不同操作系统,返回的对象应该不同。输入的第一行是一个整数 N(1 ≤ N ≤ 100),表示订单的数量。对于每笔订单,输出字符串表示该订单需要生产家具的信息。

南七行者的博客 1053

抽象工厂模式学习总结

抽象工厂模式 引言 工厂模式是抽象工厂模式特例,在工厂模式中,一个工厂对应一个产品,在抽象工厂模式中,一个工厂对应N个产品,当N=1时,抽象工厂模式就退化成了工厂模式。 抽象工厂模式重要等级★★★★★ 抽象工厂模式难度等级★★★★☆ 定义 英文定义:"Provide an interface...

江川的博客 3545

工厂方法和抽象工厂模式

文章目录一、工厂方法1、工厂法法模式结构图:2、工厂方法模式的优缺点二、抽象工厂模式1、抽象工厂模式结构图2、抽象工厂模式的优缺点 一、工厂方法 工厂方法定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。 1、工厂法法模式结构图: 工厂方法抽象出一个工厂接口,这个接口只有一个方法,就是创建抽象产品的工厂方法,所有要生产具体类的工厂就去实现这个接口。当需要创建新对象的工厂时,就不需要更改原有的工厂类,只需要增加相应的工厂类。 产品抽象类 Product pub

qq_38515961的博客 1896

Java 的静态工厂模式和抽象工厂模式

Java 的静态工厂模式和抽象工厂模式1、静态工厂模式1.1、优缺点1.2、实现案例1.2.1、抽象类1.2.2、实现类1.2.3、静态工厂类1.2.4、测试类2、抽象工厂模式2.1、适用场景2.2、案例介绍2.2.1、抽象类2.2.2、实现类2.2.3、工厂类2.2.4、测试类 1、静态工厂模式           静态工厂模式,在平常开发中是比较常见的。   1.1、优缺点   优点:

STRANGE-P 的博客 4432

【设计模式】工厂模式&抽象工厂模式

3、设计一个连接服务器的框架,需要三个协议,“POP3”、“IMAP”、“HTTP”,可以把这三个作为产品类,共同实现一个接口。有一点需要注意的地方就是复杂对象适合使用工厂模式,而简单对象,特别是只需要通过 new 就可以完成创建的对象,无需使用工厂模式。缺点:每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具 体类的依赖。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。

weixin_43902408的博客 1322
上一篇: 网安细分岗位有哪些?看看你适合哪个岗位
下一篇: Python中的内置变量及其巧妙使用
Python_P叔
博客等级 码龄3年 5451粉丝 827原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值