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

设计模式(创建型)-抽象工厂模式 在软件开发的复杂世界中,设计模式作为解决常见问题的最佳实践方案,一直扮演着至关重要的角色。抽象工厂模式,作为一种强大的创建型设计模式,在处理创建一系列或相关依赖对象的场景时,展现出了独特的优势和灵活性。它通过提供一个创建对象的接口,让开发者能够在不指定具体类的情况下构建对象,有效地解耦了对象的创建和使用过程,使得系统更加易于维护和扩展。 阅读详情

抽象工厂模式是一种创建型设计模式, 它能创建一系列相关的对象, 而无需指定其具体类。

产品族和产品等级是抽象工厂模式中的两个重要概念,它们描述了产品之间的关系。
产品族(Product Family):产品族指的是一组相关的、相互依赖的产品集合。这些产品可能是相互关联的,用于完成特定的任务或在特定的环境下工作。比如,在汽车工厂中,不同品牌(奥迪、宝马)的汽车零部件(发动机、轮胎)组成了不同的产品族。这些产品族共享某些相似性,比如它们都是用于组装汽车的零部件。

产品等级(Product Level):产品等级指的是一个产品族中的产品集合。这些产品在某种程度上是相互独立的,但它们又共享一些公共特征。在汽车工厂的例子中,发动机和轮胎属于不同的产品等级,因为它们虽然在不同的系统中工作,但都是汽车的组成部分。
在这里插入图片描述举例来说,一个汽车工厂的例子。假设我们有不同品牌的汽车(比如奥迪和宝马),每个品牌有自己的发动机和轮胎。
首先,我们定义抽象产品类,包括发动机和轮胎:

// 抽象发动机类
interface Engine {
    void design();
}

// 抽象轮胎类
interface Tire {
    void manufacture();
}

然后,我们定义具体的发动机和轮胎类:

// 具体奥迪发动机类
class AudiEngine implements Engine {
    @Override
    public void design() {
        System.out.println("Designing Audi Engine");
    }
}

// 具体奥迪轮胎类
class AudiTire implements Tire {
    @Override
    public void manufacture() {
        System.out.println("Manufacturing Audi Tire");
    }
}

// 具体宝马发动机类
class BMWEngine implements Engine {
    @Override
    public void design() {
        System.out.println("Designing BMW Engine");
    }
}

// 具体宝马轮胎类
class BMWTire implements Tire {
    @Override
    public void manufacture() {
        System.out.println("Manufacturing BMW Tire");
    }
}

接着,定义抽象工厂接口和具体的工厂类:

// 抽象汽车工厂接口
interface CarFactory {
    Engine createEngine();
    Tire createTire();
}

// 具体奥迪汽车工厂
class AudiFactory implements CarFactory {
    @Override
    public Engine createEngine() {
        return new AudiEngine();
    }

    @Override
    public Tire createTire() {
        return new AudiTire();
    }
}

// 具体宝马汽车工厂
class BMWFactory implements CarFactory {
    @Override
    public Engine createEngine() {
        return new BMWEngine();
    }

    @Override
    public Tire createTire() {
        return new BMWTire();
    }
}

最后,在主程序中使用抽象工厂来创建不同品牌汽车的零部件:

public class Main {
    public static void main(String[] args) {
        // 创建奥迪汽车工厂
        CarFactory audiFactory = new AudiFactory();
        Engine audiEngine = audiFactory.createEngine();
        Tire audiTire = audiFactory.createTire();
        
        // 创建宝马汽车工厂
        CarFactory bmwFactory = new BMWFactory();
        Engine bmwEngine = bmwFactory.createEngine();
        Tire bmwTire = bmwFactory.createTire();
        
        // 使用零部件
        audiEngine.design();
        audiTire.manufacture();
        
        bmwEngine.design();
        bmwTire.manufacture();
    }
}

以上展示了如何使用抽象工厂模式创建不同品牌汽车的零部件,其中每个工厂负责生产属于自己品牌的发动机和轮胎。

优点:

  • 一致性:你可以确保同一工厂生成的产品相互匹配。

  • 易于替换产品系列:如果需要更换产品族,只需切换具体工厂即可。这种灵活性使得系统更容易扩展和维护。

  • 符合单一职责原则:每个具体工厂类负责创建一种产品,符合类的职责单一性原则。

  • 遵循开闭原则:抽象工厂模式符合开闭原则,可以轻松地添加新产品族,而无需修改现有代码。

缺点:

  • 复杂性增加:随着产品族和产品等级的增加,抽象工厂模式可能变得更加复杂。这可能导致类的数量增加,使得系统更难以理解和维护。

适用场景:
如果代码需要与多个不同系列的相关产品交互, 但是由于无法提前获取相关信息, 或者出于对未来扩展性的考虑, 你不希望代码基于产品的具体类进行构建, 在这种情况下, 你可以使用抽象工厂

Java创建型设计模式-抽象工厂模式 我们将针对此图进行编程,着重介绍抽象工厂模式。总的来说,‌抽象工厂模式适用于需要创建一组相关产品,‌同时具备高度灵活性和可维护性的场景。‌抽象工厂模式是一种设计模式,‌它属于创建型模式,‌主要用于构建产品族。‌这种模式当有多个抽象角色时使用,‌向客户端提供一个接口,‌使得客户端在不必指定产品的具体情况下,‌能够创建多个产品族中的产品对象。‌抽象工厂模式是所有工厂模式中最抽象和最具一般性的一种形态,‌它针对的是多个产品族结构,‌而不是单个产品系列结构。‌。 阅读详情

相关推荐

【地铁上的设计模式】--创建型模式:抽象工厂模式

抽象工厂模式是一种创建型设计模式,它提供了一种方式来封装一组相关或相互依赖的对象的创建过程。抽象工厂模式将具体产品的创建与客户端代码分离开来,通过引入抽象工厂和抽象产品来实现对象的解耦和隐藏。抽象工厂负责定义一组用于创建一系列产品对象的方法,每个方法对应一个具体产品族的创建过程。具体工厂类实现抽象工厂接口,负责创建具体产品对象,并且每个具体工厂类只能创建一种具体产品族的对象。抽象产品具体产品抽象工厂和具体工厂。

喵叔 766

产品族和产品等级结构概念

转载自https://www.jianshu.com/p/f1e837cab952 产品等级结构 产品的继承结构 如图一的圆形表示的冰箱就是一个产品等级结构,三角形表示的洗衣机、方形表示的空调他们都是一个产品等级结构 产品族 不同的产品等级结构的一组产品组成产品族 如图二的第一行实心红色表示的就是一个产品族,其中该海尔的产品族分别由海尔冰箱、海尔洗衣机和海尔空调组成。 产品族和产品等级结构的关系 从图二纵向来看,不管是海尔空调、美的空调、国美空调他们都是同一种产品结构的不同的品牌产品

Victor_Li_的博客 2487

# 解决 win11 连接共享打印机,报错 0x00000709 问题

# 解决 win11 连接共享打印机,报错 0x00000709 问题

段子手168的博客 9万+

【设计模式】创建型-抽象工厂模式

正因为抽象工厂模式存在“开闭原则”的倾斜性,它以一种倾斜的方式来满足“开闭原则”,为增加新产品族提供方便,但不能为增加新产品结构提供这样的方便,因此要求设计人员在设计之初就能够全面考虑,不会在设计完成之后向系统中增加新的产品等级结构,也不会删除已有的产品等级结构,否则将会导致系统出现较大的修改,为后续维护工作带来诸多麻烦。抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式需要面对多个产品等级结构,一个工厂等级结构可以负责多个不同产品等级结构中的 产品对象的创建。

qq_53662373的博客 1291

UFS 功能描述:UFS boot

UFS 启动过程介绍:启动配置,启动代码下载过程和安全性

m0_51720747的博客 1601

新手避坑指南:用PIC16F15355开发板和MCC完成第一个UART通信项目

本文为新手提供了使用PIC16F15355开发板和MPLAB代码配置器(MCC)实现首个UART通信项目的完整指南。通过图形化配置系统时钟、UART参数并自动生成驱动代码,手把手教学如何避开常见陷阱,快速完成从环境搭建、代码编写到调试输出的全流程,助力开发者高效入门PIC单片机开发。

bash7scripter的博客 725

什么是产品,产品系列,产品线,产品族?

在这个充满不确定性的VUCA时代,企业面临着前所未有的挑战与机遇。市场的快速变化、技术的飞速发展以及消费者需求的多样化,都要求企业必须具备强大的适应能力。而这种能力的核心,正是企业的“产品架构”。产品架构,就如同企业的DNA一样,决定了企业的内在特质和发展方向。它不仅涵盖了企业所提供的产品种类、功能、质量等要素,还体现了企业对市场需求的理解和满足能力。一个合理、灵活且富有创新性的产品架构,能够使企业在复杂多变的环境中迅速做出反应,调整自身的产品策略,以更好地适应市场的变化。

SAYF001的博客 1万+

不止是打字机效果:手把手教你用SpannableStringBuilder打造Android富文本AI对话界面

本文详细介绍了如何使用SpannableStringBuilder在Android平台上构建专业级AI对话界面,涵盖流式文本处理、富文本解析、交互优化等核心技术。通过实战代码示例,帮助开发者实现类似DeepSeek的AI产品交互效果,提升用户体验和应用专业度。

weixin_28358083的博客 198

GOF设计模式(02)抽象工厂模式

抽象工厂模式简介 一、模式定义 1、比较权威的定义 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。 抽象工厂模式又称为Kit模式,它是一种对象创建型模式。 2、对于该模式的理解 工厂方法模式中的每个工厂只生产一类产品,会导致系统中存在大量的工厂类,势必会增加系统的开销 抽象工厂是将一些...

weixin_30571465的博客 377

LVGL v8学习笔记 | 09 - 进度条控件的使用方法(bar)

lv_bar_set_range必须放在lv_bar_set_mode前面,否则不生效。bar对象的API在lv_bar.h中声明,以lv_bar_xxx命名。此事件可以用来在进度条更新值之后更新别的控件(比如进度条旁边的文字)。可以看到,默认创建的进度条值是0到100。(3)设置进度条的范围值(最大值和最小值)(2)获取进度条的起始值。(3)获取进度条的最小值。(4)获取进度条的最大值。(1)设置进度条的当前值。(2)设置进度条的起始值。(1)获取进度条当前值。(5)获取进度条的模式。

Mculover666的博客(嵌入式) 1729

SAP FICO 中的 F-02 :概念、使用场景及案例解析

在 SAP FICO (财务会计与管理会计) 模块中,F-02 是一个用于录入总账凭证的事务代码。这个事务代码主要用于手动输入总账凭证,适用于各类财务交易,例如资产购入、费用支付、收入确认等。F-02 的重要性在于,它允许财务人员在 SAP 系统中创建凭证,并确保这些凭证能够正确影响总账账户。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2060

Golang设计模式(抽象工厂模式)

模式定义 为了更清晰地理解工厂方法模式,需要先引入两个概念: 产品等级结构 :产品等级结构即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机、海信电视机、TCL电视机,则抽象电视机与具体品牌的电视机之间构成了一个产品等级结构,抽象电视机是父类,而具体品牌的电视机是其子类。 产品族 :在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品,如海尔电器工厂生产的海尔电视机、海尔电冰箱,海尔电视机位于电视机产品等级结构中,海尔电冰箱位于电冰箱产品等级结构中。 抽象工厂模式

qq_43490063的博客 624

FPGA+CUYSB3014实现USB3.0功能

CYUSB3014是赛普拉斯在近几年推出的新一代USB3.0的外设控制器,可以解决USB2.0带宽限制,或者单独开发USB协议和驱动的难题。赛普拉斯将CYUSB3014简称为EZ-USB FX3,具有高度的灵活特性,开发人员只需要下载FX3的固件库,就能使用USB3.0的功能。目前在一些电子产品中,使用主控器加PHY芯片最流行的方式是用FPGA+FX3这种搭配来实现USB3.0接口。......

D_Katter的博客 7065

设计模式——抽象工厂设计模式(创建型)

抽象工厂设计模式是一种创建型设计模式,旨在提供一个接口,用于创建一系列相关或依赖的对象,无需指定具体类。它通过抽象工厂、具体工厂、抽象产品和具体产品等组件构建,相比工厂方法模式,能创建一个产品族。该模式适用于多个产品需一起创建的场景,可隐藏产品细节,便于客户端使用。

庄小焱 1487

【LDPC-7】LLR量化位宽对LDPC译码性能的影响分析——以最小和译码算法为例进行matlab仿真

最小和译码算法的步骤如下:最后译码结果如果满足或者完成所有迭代次数,则译码算法停止迭代,否则继续进行译码迭代操作。

FPGA/MATLAB学习教程/源码/项目合作开发 1471

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

设计模式创建型——抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)隶属于设计模式中的创建型模式,用于产品族的构建。抽象工厂是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂是指当有多个抽象角色时使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象。

tszc95的博客 9863

jre9下载 jdk9

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

设计模式--抽象工厂模式【创建型模式】

抽象工厂模式是一种创建型模式,该模式提供了一个超级工厂(抽象工厂),其他工厂来是实现这个工厂接口,同时还有一个工厂创建类,通过传入不同的参数,来创建不同的工厂,抽象工厂 模式是对工厂模式的扩展,工厂模式只是某类产品的工厂,而抽象工厂则是多类产品的工厂,可以理解为一类产品(产品族)的工厂,而抽象工厂就是工厂的工厂,是一个超级工厂。产品族。

weixin_42118323的博客 1378

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【设计模式】创建型模式(二):抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

Data · Model · Agent · Repeat 1557

23种设计模式-创建型模式-抽象工厂

初步理解抽象工厂模式

gdr12的专栏 944

【设计模式】创建型模式——抽象工厂模式

创建型模式——抽象工厂模式

这里是Mae。 787

设计模式创建型模式之抽象工厂

抽象工厂是一种创建型设计模式,它能创建一系列相关的对象,而无需指定其具体类。 抽象工厂 现在有多个家具,椅子:英式椅子、中式椅子,沙发:英式沙发、中式沙发,桌子:英式桌子、中式桌子。如果使用工厂方法,则需要每一个家具产品都需要有对应的工厂类,当产品数量很多的时候,工厂类的数量也会越来越多,搞得系统非常复杂。 解决方法:将这些产品进行分组,分为英式家具和中式家具,每组中的不同产品,由同一个工厂类的不同方法来创建。 public interface Chair{ void showChair(); } pu

s254356的博客 126

抽象工厂模式——创建型设计模式

● 抽象工厂模式介绍 重新工厂模式(Abstract Factory Pattern),也是创建型设计模式之一。上一篇我们已经了解工厂方法模式,那么这个抽象工厂又是怎么一回事呢?大家联想一下现实生活中的工厂肯定都是具体的,也就是说每个工厂都会生产某一种具体的产品,那么抽象工厂意味着生产出来的产品是不确定的,那这岂不是很奇怪?抽象工厂模式起源于以前对不同操作系统的图形化解决方案,如不同操作系统中的按钮和文本框控件其实现不同,展示效果也不一样,对于每一个操作系统,其本身就构成一个产品类,而按钮...

qq_34368586的博客 237

设计模式(10)——创建型模式之抽象工厂

抽象工厂是一种创建型设计模式,用于生产一系列相关对象而无需指定具体类。其核心结构包含抽象产品、具体产品、抽象工厂和具体工厂,客户代码仅需通过抽象接口交互。以GUI开发为例,不同操作系统(Windows/Mac)的按钮和复选框属于同一产品系列,通过抽象工厂可确保产品兼容性并降低耦合。该模式适用于需要灵活切换产品系列或避免代码依赖具体类的场景,能有效提升系统扩展性和可维护性

SpringBoy的博客 826

深入浅出设计模式——创建型模式之抽象工厂模式 Abstract factory

抽象工厂模式是一种创建型设计模式,用于生产一组相关或依赖的产品族。它通过抽象工厂接口提供创建多种产品的方法,避免了为每个产品单独创建工厂类。文中以运动场景为例,展示了篮球和足球两种产品族的实现:抽象产品类(球类和球衣类)定义统一接口,具体产品类实现具体功能;抽象工厂类声明创建方法,具体工厂类按产品族实现创建逻辑。客户端通过选择不同工厂即可获取配套产品(如篮球+篮球衣)。该模式便于扩展新产品族(如新增排球系列),但难以扩展已有产品族的新产品(如新增篮球鞋需要修改工厂接口)。测试结果验证了该模式能有效管理相关产

Atticus的博客 1015

设计模式之创建型:抽象工厂模式

抽象工厂模式是一种创建型设计模式,​​提供一组相关或依赖对象的创建接口,而无需指定具体类​​。它强调创建​​产品族​​(一组相关联的产品),例如不同操作系统的 UI 组件(按钮、文本框等),或不同数据库的驱动适配器。

keep simple 480

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

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

我神级欧文的博客 547
上一篇: 创建型设计模式-工厂方法
下一篇: 创建型设计模式-生成器模式
#难得糊涂
博客等级 码龄8年 231粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值