设计模式之抽象工厂模式

C++设计模式——Abstract Factory Pattern抽象工厂模式 抽象工厂模式是一种创建型设计模式,它提供了一种将相关/依赖对象组合在一起创建的方式,而无需指定它们的具体类。抽象工厂模式与工厂方法模式的区别:工厂方法模式将对象的创建过程延迟到子类中,允许用户通过一个统一的接口来请求他们想要的具体产品,而无需知道产品的具体实现。在这个模式中,工厂类只负责生产同一系列的产品,但具体哪种产品由子类决定。抽象工厂模式更进一步,它提供了一个接口,用于创建一系列相关的或相互依赖的对象,而不是单一对象。 阅读详情

abstract-factory-design-pattern

抽象工厂模式的概念、抽象工厂的结构、抽象工厂的优缺点、抽象工厂的使用场景、抽象工厂的实现示例、抽象工厂的源码分析


1、抽象工厂的概念

  抽象工厂模式,即工厂方法模式的升级版,其可以生产一个产品族的产品。

  工厂方法模式的局限性是只能生产一类产品,这里我们把同类产品呢叫做同等级产品,如手机是一个等级,电脑是一个等级。一个新的定义,就是同族产品,如华为手机、华为电脑是同一族,同属华为族;苹果手机、苹果电脑是同一族,同属苹果族。于是,产品工厂的定义也由同等级工厂升级为同族产品工厂,如华为工厂、苹果工厂。不言而喻,不管是华为工厂还是苹果工厂,都具有生产手机和电脑的功能,故,抽象工厂的的作用就被定义了,那就是定义生产手机和电脑。

2、抽象工厂的结构

  • 抽象产品:定义同等级产品的行为,即抽象工厂模式中有多个抽象产品类。
  • 具体产品:实现抽象产品,使产品具像化。
  • 抽象工厂:定义多个同等级产品的生产行为,即每次可生产出同族的不同等级的产品。
  • 具体工厂:实现抽象工厂,来创建一个具体产品的对象实例。

abstract-factory-class

3、抽象工厂的优缺点

  • 优点:
    • 可在类内部对产品族中相关联的多等级产品共同管理,而不必增加新的类管理。
    • 增加一个新产品族时,无需修改原有代码,只需增加该产品族的具体产品及其对应的产品工厂即可。满足开闭原则。
  • 缺点:
    • 当增加一个新等级的产品时,几乎所有的工厂类都需要改动,所以产品等级的划分非常重要。

4、抽象工厂的使用场景

  • 系统中有多个产品族,每个具体工厂创建属于同族单不同等级的产品。
  • 系统每次只能使用同一族产品,即同族不同等级的产品。

5、抽象工厂的实现示例

抽象产品一:

public interface ComputeProduct {

    /**
     * 行为
     */
    void behavior();
}

抽象产品一的具体产品一:

public class HuaComputeProduct implements ComputeProduct {

    @Override
    public void behavior() {
        System.out.println("我是华为电脑");
    }
}

抽象产品一的具体产品二:

public class AppleComputeProduct implements ComputeProduct {

    @Override
    public void behavior() {
        System.out.println("我是苹果电脑");
    }
}

抽象产品二:

public interface PhoneProduct {

    /**
     * 行为
     */
    void behavior();
}

抽象产品二的具体产品一:

public class HuaPhoneProduct implements PhoneProduct {

    @Override
    public void behavior() {
        System.out.println("我是华为手机");
    }
}

抽象产品二的具体产品二:

public class ApplePhoneProduct implements PhoneProduct {

    @Override
    public void behavior() {
        System.out.println("我是苹果手机");
    }
}

抽象工厂:

public interface Factory {

    /**
     * 生产电脑
     * @return
     */
    ComputeProduct productCompute();

    /**
     * 生产手机
     * @return
     */
    PhoneProduct productPhone();
}

具体工厂一:

public class HuaFactory implements Factory {

    @Override
    public ComputeProduct productCompute() {
        return new HuaComputeProduct();
    }

    @Override
    public PhoneProduct productPhone() {
        return new HuaPhoneProduct();
    }
}

具体工厂二:

public class AppleFactory implements Factory {

    @Override
    public ComputeProduct productCompute() {
        return new AppleComputeProduct();
    }

    @Override
    public PhoneProduct productPhone() {
        return new ApplePhoneProduct();
    }
}

测试:

public class AbstractFactoryTest {

    public static void main(String[] args) {
        Factory huaFactory = new HuaFactory();
        Factory appleFactory = new AppleFactory();

        ComputeProduct huaComputeProduct = huaFactory.productCompute();
        PhoneProduct huaPhoneProduct = huaFactory.productPhone();

        ComputeProduct appleComputeProduct = appleFactory.productCompute();
        PhoneProduct applePhoneProduct = appleFactory.productPhone();

        huaComputeProduct.behavior();
        huaPhoneProduct.behavior();

        appleComputeProduct.behavior();
        applePhoneProduct.behavior();
    }
}

测试结果:

我是华为电脑
我是华为手机
我是苹果电脑
我是苹果手机

6、抽象工厂的源码分析

  loading…

SLUB DEBUG 检测slab 内存泄漏 文章介绍如何定位linux 内核中slab 内存泄漏。 阅读详情

相关推荐

理想汽车智驾方案介绍 4 World model + 强化学习重建自动驾驶交互环境

本帖将以 DrivingSphere 为例来解析这个过程。

地平线开发者 1920

设计模式之工厂模式

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

aaa31203的博客 16万+

【硬件开发】振铃

如果是开关管的振铃,那么桥臂的SW处产生的振铃会窜入驱动电路,造成的结果就是驱动电路和上桥臂下桥臂之间的SW节点都会有振铃现象。如果是驱动电路的振铃,那么MCU的输出引脚还是正常的PWM,但是到了MOS管两侧就变成带有振铃的PWM波形了。开关振铃产生的原因是MOS管上面的寄生电感当开关管打开时为了保持电流不变感应出的电压会对电源和地产生冲击。开关管的驱动线上的寄生电容和寄生电感导致的振铃为驱动电路振铃。开关管上的寄生电容和寄生电感导致的振铃为开关节点振铃。、电感等元件的存在,导致电路中的电压和。

weixin_62546664的博客 1827

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

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

tszc95的博客 9863

测试dali协议的软件,DALI2.0和DALI1.0完美兼容同一个模块,测试每项可过协议

DALI2.0和DALI1.0完美兼容同一个模块,测试每项可过协议深圳聚积智能 夏先生 13246760327 QQ 349098308■IEC62386-102(V2.0)通过测试内容IEC62386-102/2.1/Test preambleIEC62386-102/3.1/Polarity testIEC62386-102/3.2/Maximum and minimum system v...

weixin_35343788的博客 1351

C#粘包和分包问题及解决方法

一:通过图解法来描述一下分包和粘包,这样客户更清晰直观的了解:  下面对上面的图进行解释:  1.正常情况:如果Socket Client 发送的数据包,在Socket Server端也是一个一个完整接收的,那个就不会出现粘包和分包情况,数据正常读取。  2.粘包情况:Socket Client发送的数据包,在客户端发送和服务器接收的情况下都有可能发送,因为客户端发送的数据都是发送的一个缓冲...

weixin_42033401的博客 7767

抽象工厂模式-Abstract Factory Pattern

抽象工厂模式-Abstract Factory Pattern

帕布里克沃德曼的博客 1万+

告别手册!S32K3XX的eMIOS实战:从GPT定时到PWM输出,一个通道搞定电机控制

本文深入探讨了NXP S32K3XX系列MCU的eMIOS模块在电机控制中的高效应用。通过单通道实现PWM生成、输入捕获和定时中断三大功能,展示了如何简化BLDC电机控制硬件设计。文章结合RTD库与寄存器级编程,提供动态模式切换和性能优化方案,显著降低CPU负载。

weixin_42522374的博客 147

抽象工厂模式详解

抽象工厂模式(Abstract Factory Pattern)也是一种创建型设计模式,它提供了一种创建一系列相关或者相依赖对象的工厂接口(超级工厂),不同类型的工厂再去实现这个抽象工厂,最后还可提供一个工厂创造者类,通过传入工厂类型参数来创建具体工厂。它是对工厂方法模式的扩展,核心思想是将工厂本身也抽象化,其主旨是围绕一个超级工厂或中心工厂去创建其他工厂,这个超级工厂又称为其他工厂的工厂。它与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级;而抽象工厂模式则是针对的多个产品等级,即一个产品族。

qq_36756227的博客 3471

无法找到 Adobe PDF资源文件。“Acrobat PDFMaker“您必须具有”管理员”权限方可安装这些文件...错误怎么解决

本文的内容是无法找到 Adobe PDF资源文件。“Acrobat PDFMaker“您必须具有”管理员”权限方可安装这些文件...错误的解决办法。

西岸贤 1万+

基于ArduPilot的旋翼式无人机飞行器开发系列(二,学习路线)

一,热爱 作为一名耿直的技术男,在这里我只想说一句,热爱是可持续学习的第一要素,也只有热爱才能让你坚持到最后。 至于最后能得到什么,只有你自己知道。常说书中自有颜如玉,书中自有黄金屋。如果你是为了颜如玉,我相信大多数颜如玉做不了你的红颜知己。如果是为了黄金屋,当你持续投入时间和金钱却看不到回报的时候,相信退堂鼓早已隆隆作响。 我给自己的信条就是为当下努力工作,为将来持续学习。当前飞控行业并没有爆发,如果想赚块钱,去互联网汽车,去VR/AR吧,去元宇宙吧。 那么我热爱...

从0到1,突破自己 1667

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

抽象工厂(Abstract Factory Pattern)是一种常用的设计模式,在我们的日常开发中总能见到它的身影。其定义为:即:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类。

码农桶子哥的博客 1857

【ComfyUI】QwenImageEdit OOTD角色与姿态匹配换装

本文介绍了一个基于Qwen Edit OOTD 2.0的ComfyUI工作流,能够实现角色与姿态匹配的智能穿搭生成。该工作流通过整合模型推理、姿态识别、图像拼接和渲染等节点,完成从角色图、姿态图到成品穿搭图的完整生成流程。核心采用Qwen Image系列模型进行图像理解和编辑,配合ControlNet进行姿态引导。用户只需提供角色图和姿态参考图,系统即可自动完成姿态解析、语义编码、采样生成等步骤,输出与输入姿态一致的穿搭图像。该方案适用于虚拟角色展示、电商试穿等场景,能保持角色特征一致的同时灵活变换姿态,显

Mr数据杨 1585

23种设计模式之抽象工厂模式(Abstract Factory Pattern)

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

小威的博客 2万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

设计模式-抽象工厂模式(Abstract Factory Pattern)

设计模式-抽象工厂模式(Abstract Factory Pattern)

weixin_45226668的博客 997

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【设计模式】——抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式是所有形态的工厂模式中最抽象和最具一般性的一种。它适用于处理具有产品族(即一组相互关联或相互依赖的产品)的产品结构。产品族是指位于不同等级结构中的一组产品,它们之间可能存在一定的依赖或约束关系。抽象工厂模式通过定义一个接口,使得客户端可以在不必指定具体产品的情况下,创建多个产品族中的产品对象。

J^T的博客 2362

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

设计模式系列(六)抽象工厂模式(Abstract Factory Pattern)

设计模式系列(五)抽象工厂模式(Abstract Factory Pattern)     抽象工厂模式

君临天下的博客 991

设计模式中的抽象工厂模式(Abstract Factory Pattern)

在软件开发中,经常需要创建一组相关的对象,并希望这些对象能够在不同的产品族之间互相兼容。如果直接在代码中实例化具体类,会导致代码耦合、难以扩展、违反开闭原则(OCP)。抽象工厂模式(Abstract Factory Pattern)提供了一种创建一组相关或依赖对象的接口,而无需指定它们的具体类,从而提高代码的灵活性和可维护性。本文将详细介绍抽象工厂模式的概念、应用场景,并通过 Python 代码示例展示其实现方式。

1106

Java设计模式 四 抽象工厂模式 (Abstract Factory Pattern)

是一种创建型设计模式,用于创建一系列相关或相互依赖的对象,而无需指定它们的具体类。抽象工厂模式为产品族的创建提供了一个接口,其核心在于解决“产品族的扩展”和“客户端与具体工厂的解耦”。

空 854

秒懂设计模式之抽象工厂模式(Abstract Factory Pattern)

前言 人在IT江湖飘,不懂设计模式咋装逼? 三种工厂模式均为创建型模式,即讨论的是如何创建一个类的对象的问题。说到底就是以各种装逼的方式最终将一个类的对象new出来。没有什么神秘的,如果你发现你需要一个类的对象而你又不会这些装逼神器,那你就直接new好啦,爱谁谁。。。不过你也就逃脱不了永远是个小白的命运啦,过几年混不下去了就只能去卖奶茶,什么?你不想那么快就去卖奶茶,那就好好学习这些装逼神器! 定...

ShuSheng007的程序人生 7077

设计模式之抽象工厂模式(Abstract Factory Pattern)

一、抽象工厂模式的由来   抽象工厂模式,最开始是为了解决操作系统按钮和窗体风格,而产生的一种设计模式。例如:在windows系统中,我们要用windows设定的按钮和窗体,当我们切换Linux系统时,要把按钮和窗体统一切换成Linux风格的。如何统一进行调换呢?于是就有人设计出了,windows是一个工厂,生产windows的窗体和按钮,Linux是一个工厂,生产Linux的窗体和按钮,通过切换工厂,来整体切换按钮和窗体风格。 看了上面的描述,是不是感觉说了一堆废话呢?????其实抽象工厂模式是从工厂方法

敲代码的小小酥的博客 522

设计模式—抽象工厂模式(Abstract Factory Pattern)

动机 在了解动机之前,先回顾一下工厂方法模式: 在工厂方法模式中,工厂类都是对单一产品对象进行操作,每一个具体工厂对应一种具体产品,工厂方法具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法。 问题:如果想要一个工厂对多个产品对象进行操作,而不是只对单一产品进行操作,那么工厂方法模式就会变得很复杂,如何解决呢? 当系统所提供的工厂所需生产的具体产品并不是一个单一产品,而是多个位于不同继承结构之间的不同类型的产品组成的产品族,这时候就需要使用到抽象工厂模式。 继承结构:如一

gcdqwer的博客 304

23种设计模式——抽象工厂模式(Abstract Factory Pattern)详解

本文介绍了23种设计模式之——抽象工厂模式(Abstract Factory Pattern)的说明及使用

Meteors.的博客 1246

设计模式精讲 Day 3:抽象工厂模式(Abstract Factory Pattern)

在面向对象设计中,抽象工厂模式是一种用于创建一系列相关或依赖对象的接口,而无需指定它们具体的类。它属于创建型模式,是工厂方法模式的进一步抽象和扩展。本节将围绕抽象工厂模式展开,分析其核心思想、结构组成、使用场景以及在实际项目中的价值。抽象工厂模式提供了一个接口,用于创建一组相关或相互依赖的对象,而无需指定它们的具体类。它封装了多个工厂方法,使得客户端可以统一地创建不同产品的家族。核心思想:将对象的创建逻辑封装到一个工厂接口中,客户端通过调用该接口获取产品,而不是直接实例化具体类。今天,我们深入学习了。

在未来等你的专栏 1126

设计模式 抽象工厂模式(Abstract Factory Pattern)

设计模式 抽象工厂模式(Abstract Factory Pattern) 一、简述 抽象工厂模式:定义一个创建一些列相关或相互依赖的对象接口,而无需指定它们具体的类。 对比工厂方法模式:(简历举例) 工厂方法模式是 多个工厂,一个工厂创建一个单一的产品。 抽象工厂模式是 多个工厂,一个工厂创建一些相关的产品(比如生产同一个牌子的上衣和裤子、比如生产同一系列但不同款式的衣服) 例子打包:例子打包:外链:https://wwa.lan...

Genven_Liang的博客 459

JAVA23种设计模式之抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。 介绍 意图 :提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 主要解决:解决接口选择的问题。 使用时机:产品有多于一个的产品族,而系统只消费其中某一族的产品。 优点

fuu123f的博客 196
上一篇: 设计模式之工厂方法模式
下一篇: 设计模式之建造者模式
红衣女妖仙
博客等级 码龄9年 214粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

红衣女妖仙

行行好,给点吃的吧!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值