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

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

一、模式定义

抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。

简单来说,抽象工厂模式就是工厂模式的拓展,不同的是,抽象工厂模式能生产多种具有联系的产品对象,而工厂模式一个工厂只生产一种产品。

下面通过类图来分析具有联系的含义。

二、模式类图

在这里插入图片描述
从图中我们能看出工厂子类能同时生产产品A和产品B,这里想说的具有联系就是说,A和B可能是同一个产品公司旗下的产品,这就引申出产品等级结构概念。

用打比方来解释产品等级结构的概念,比如说苹果和华为都能生产手机和平板电脑,即ProductA代表手机,ConcreteProductA1代表苹果手机,ConcreteProductA2代表华为手机,ProductB代表平板电脑,那么手机和平板电脑就处在不同的等级结构。而ConcreteFactoryA也就代表苹果公司,ConcreteFactoryB代表华为公司,如此一来,对抽象工厂模式也就进一步加深理解了。

三、模式代码

abstract class Factory{
	//这里是抽象工厂类
	abstract public ProductA createProductA();
	abstract public ProductB createProductB();
}

class ConcreteFactoryA extends Factory{
	//这里是具体工厂类
	public ProductA createProductA() { return new ConcreteProductA1();}
	public ProductB createProductB() { return new ConcreteProductB1();}
}
class ConcreteFactoryB extends Factory{
	public ProductA createProductA() { return new ConcreteProductA2();}
	public ProductB createProductB() { return new ConcreteProductB2();}
}

abstract class ProductA{
	//这里是抽象产品类A
	abstract public void Print();
}

class ConcreteProductA1 extends ProductA{
	//这里是具体产品类A1
	public void Print() { System.out.println("This is A1");}
}
class ConcreteProductA2 extends ProductA{
	public void Print() { System.out.println("This is A2");}
}

abstract class ProductB{
	//这里是抽象产品类B
	abstract public void Print();
}
class ConcreteProductB1 extends ProductB{
	//这里是具体产品类B1
	public void Print() {System.out.println("This is B1");}
}
class ConcreteProductB2 extends ProductB{
	public void Print() {System.out.println("This is B2");}
}

public class Main {
	public static void main(String[] args) {
		Factory A = new ConcreteFactoryA();
		Factory B = new ConcreteFactoryB();
		
		ProductA pA1 = A.createProductA();
		ProductB pB1 = A.createProductB();
		
		ProductA pA2 = B.createProductA();
		ProductB pB2 = B.createProductB();
		
		pA1.Print(); pA2.Print();
		pB1.Print(); pB2.Print();
	}
}

四、模式优缺点

1.优点:保证了客户始终使用的是一个产品族的对象(对于一些需要针对当前环境决定行为的软件来说是不错之选),符合开闭原则。
2.缺点:开闭原则的倾斜性(增加新产品族困难)。

告别信息过载:我是如何用Feedly RSS阅读器打造个人专属信息流的(附Chrome插件使用技巧) 本文分享了如何利用Feedly RSS阅读器有效管理信息过载,打造个人专属信息流的方法。通过科学组织订阅源、智能过滤和跨平台同步技巧,帮助用户从被动接收转为主动筛选,提升信息获取效率。特别推荐使用Feedly的Chrome插件和AI过滤功能,实现高效的信息管理。 阅读详情

相关推荐

使用mmdetection快速复现计算机视觉顶会论文

使用mmdetection中支持的算法运行自定义数据集

m0_56896669的博客 2422

第四章 抽象工厂模式

一、模式示例 定义:抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。 1.1、原理 UML图 角色分类: 1、抽象工厂角色:模式的...

weixin_43054590的博客 429

ESP32搭配LVGL显示图片的两种方法详解:内部存储 vs 外部文件

本文详细介绍了ESP32搭配LVGL显示图片的两种方法:内部存储与外部文件。内部存储方案适合快速响应的小图片,而外部文件方案则适用于需要灵活更新和大容量图片的场景。通过对比分析,帮助开发者根据项目需求选择最优方案,提升嵌入式系统的UI性能。

weixin_30399821的博客 519

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

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

小威的博客 2万+

全球AI算力最强公司分析报告

全球AI算力最强公司分析报告显示,Google凭借自研TPU技术和庞大数据中心网络位居榜首,拥有约100万至150万块等效H100 GPU算力。微软、Meta和亚马逊紧随其后,分别拥有75万、55万和25万块等效H100 GPU。中国企业中,百度、阿里巴巴和腾讯表现突出,华为在国产AI芯片领域领先。技术指标上,NVIDIA H100相比A100性能显著提升,但功耗也大幅增加。未来AI算力需求将持续激增,预计2028年全球市场将超2000亿美元。新兴挑战者如xAI可能改变竞争格局。

MyySophia的博客 5714

使用 VPN 访问太理内部网相关问题总结【太原理工大学】

电脑连接 VPN,访问校园内部网相关问题总结,太原理工大学。

m0_52861684的博客 9880

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

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

J^T的博客 2362

手把手教你用NetToPLCsim搭建西门子S7-1200仿真环境(附避坑指南)

本文详细指导如何利用NetToPLCsim与PLCSIM搭建西门子S7-1200仿真环境,实现无硬件条件下的PLC程序测试与上位机通信开发。内容涵盖软件选型、环境部署、关键参数配置及通信测试,并重点提供了连接失败、数据读写错误等常见问题的深度避坑指南,帮助工程师高效构建可靠的虚拟调试工作流。

a3b4c5的博客 614

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

抽象工厂模式 定义 抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口,无需指定它们具体的类。 现在看不明白没关系,坚持看到最后,并且把例子看懂,再来多体会几遍就能明白了。 类型 创建型。 适用场景 应用层不依赖于产品类实例如何被创建、实现等细节。 强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量的重复代码。 提供一个产品类的库,所有的产品以同样的接口出现,从而使得应用...

kaven 4903

KVM — 与 QEMU 和 Libvirt 的关系

目录目录 前言 KVM QEMU KVM 与 QEMU qemu-kvm Libvirt Libvirt 在 OpenStack 中的应用前言如果是刚开始接触虚拟机技术的话, 对上述的概念肯定会有所混淆, 傻傻的分不清. 尤其在看虚拟化技术文档时导致理解能力下降, 所以在开始学习虚拟化技术之前对这些概念有一个整体的认识和清晰的理解, 就显得很有必要了.KVMKVM(Kernel-basedVirtu

烟云的计算 5737

华为OD机试双机位C卷-部门人力分配 (Py/Java/C/C++/Js/Go)

华为OD机试(机考)双机位C卷 【部门人力分配】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试 - 部门人力分配。

qq_45776114的博客 1874

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

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

ShuSheng007的程序人生 7077

大数据领域数据架构的工业互联网数据架构设计

工业互联网作为第四次工业革命的重要驱动力,正在深刻改变传统制造业的生产方式和商业模式。本文旨在探讨工业互联网环境下的大数据架构设计,重点解决工业数据采集、传输、存储、处理和分析等关键环节的技术挑战。工业互联网数据架构的核心组件大数据技术在工业场景下的应用数据治理和质量控制边缘计算与云计算的协同架构背景介绍:建立基本概念和问题域核心架构:详细解析工业互联网数据架构技术实现:通过代码和数学模型展示关键技术实践案例:展示真实场景应用工具资源:推荐实用开发工具和学习资源。

软件工程实践的博客 856

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

/** * 抽象工厂模式。<br/> * 抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。 * @author Bright Lee */ public class AbstractFactoryPattern { public static void main(String[] args) { AbstractFactory facto...

look4liming的专栏 320

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

设计模式--抽象工厂模式【 Abstract Factory Pattern】

声明:本文从网络书籍整理而来,并非原创。上一次工厂方法模式讲到女娲造人,人是造出来了,世界热闹了,可是低头一看,都是清一色的类型,缺少关爱、仇恨、喜怒哀乐等情绪,人类的生命太平淡了,女娲一想,猛然一拍脑袋,Shit!忘记给人类定义性别了,那怎么办?抹掉重来,然后就把人类重新洗牌,准备重新开始制造人类。由于先前的工作已经花费了很大的精力做为铺垫,也不想从头开始了,那先说人类(Product 产品类)怎

mjd的专栏 1856

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

JAVA设计模式之 抽象工厂模式【Abstract Factory Pattern】

一、概述 二、适用chang

小吕丶Code阶区 3847

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

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

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

抽象工厂模式是一种创建型设计模式,它提供了一种创建一系列相关或依赖对象的接口,而无需指定它们具体的类。抽象工厂模式与工厂方法模式相比,不仅仅是针对单一产品的创建,而是针对产品族的创建,即相关联的产品组合。抽象工厂模式是一种常见且实用的设计模式,通过提供一组相关产品的创建接口,保证了产品族的一致性,同时也降低了客户端与具体产品的耦合度。在设计系统时,根据具体需求选择合适的设计模式能够提高代码的可维护性和可扩展性。

无休居士的博客 1891

DesignPattern_Java:Abstract Factory Pattern

抽象工厂模式 Abstract Factory Pattern Provide an interface for creating families of related or dependent objects without specifying their concrete classes. 为创建一组相关或相互依赖的对象提供一个接口,而且无须指定他们的具体类。 抽象工厂角色(Abst

Anonymous 965

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

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

1106

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

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

Meteors.的博客 1246

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

摘要: 抽象工厂模式核心解决产品族一致性问题,确保一组相关产品(如UI组件)风格统一。与工厂方法不同,它通过类型系统强制约束,使同一工厂创建的所有产品必然兼容。典型应用如跨平台UI框架(Qt/Flutter)保持组件风格一致。其优势在于客户端与具体类解耦、风格切换灵活,但代价是扩展新产品需修改所有工厂实现。本质是将**"产品族创建契约"编码到接口**中,避免混搭风险。适用场景:多风格/主题系统,且各风格包含多个关联组件时。 (字数:150)

goodparty的专栏 1094

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

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

敲代码的小小酥的博客 522

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

抽象工程模式Abstract Factory 抽象工程模式1、背景2、定义3、特征4、应用参考 抽象工程模式 1、背景 2、定义 3、特征 4、应用 参考

JMW1407的博客 536

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

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

空 854
上一篇: 设计模式——工厂方法模式(Factory Method Pattern)
下一篇: 设计模式——建造者模式(Builder Pattern)
L!sa3
博客等级 码龄8年 2粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值