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

embedded/2025/3/20 15:21:39/

摘要

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

定义

        抽象工厂模式的核心定义是提供一个创建一系列或相关依赖对象的接口,而无需指定它们具体的类。这意味着在一个复杂的系统中,当存在多个相关对象的创建需求,并且这些对象之间存在依赖关系或需要协同工作时,抽象工厂模式能够派上用场。

        例如,在一个游戏引擎中,可能需要创建不同类型的角色、武器和装备,并且这些游戏元素之间存在着相互依赖的关系,比如特定的角色需要特定的武器才能发挥最佳效果。抽象工厂模式就可以通过定义一个统一的工厂接口,由具体的工厂子类来负责创建这些相关的游戏元素,从而简化了对象创建的过程,同时保证了对象之间的一致性和协调性。

类图

角色

抽象工厂角色

        抽象工厂角色描述了具体工厂的公共接口,它是所有具体工厂类的父类。这个接口定义了创建一系列产品对象的抽象方法,这些方法并不包含具体的创建逻辑,而是由具体的工厂子类来实现。例如,在一个电子产品制造系统中,抽象工厂可能定义了创建手机、电脑和平板等电子产品的抽象方法,而具体的华为工厂子类和小米工厂子类则会根据自身的产品特点来实现这些方法,创建出相应品牌的手机、电脑和平板。抽象工厂角色的存在使得系统具有更好的扩展性和可维护性,当需要添加新的产品系列时,只需要创建一个新的具体工厂子类并实现抽象工厂接口中的方法即可,而无需修改其他已有的代码。

具体工厂角色

        具体工厂角色是负责创建产品实例的类,它主要实现了抽象工厂中定义的抽象方法,完成具体产品的创建过程。每个具体工厂类都对应着一个特定的产品系列,例如华为工厂负责创建华为品牌的各种电子产品,小米工厂负责创建小米品牌的相关产品。具体工厂类熟知如何创建该系列下的所有产品对象,并且保证这些产品对象之间的兼容性和协作性。在实际应用中,客户端通过调用具体工厂类的方法来获取所需的产品对象,而无需关心产品对象的具体创建细节,这大大降低了客户端代码与产品创建逻辑之间的耦合度。

抽象产品角色

        抽象产品角色是简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。引入抽象产品角色可以显著提高系统的灵活性,因为在工厂类中只需定义一个通用的工厂方法,就可以创建各种具体产品对象,只要这些具体产品对象都是抽象产品角色的子类。以电子产品为例


http://www.ppmy.cn/embedded/174179.html

相关文章

宝石PDF,全新 PC 版本,全部免费

宝石PDF已经运行 3 年时间,有客户端,小程序,一直未上 PC 版本,随着客户端功能升级的不及时,很多用户建议上 PC 版本。但是飞哥一直忙,这不终于给上了。 同时系统的名称也从 “PDF云转换”改为“宝石PDF”&…

创新实训项目初始化——gitee的使用

创新实训项目管理采用gitee,写下这篇博客熟悉gitee进行项目创建和版本同步 一、gitee概述 Gitee 是一个基于 Git 的代码托管平台,与 GitHub 类似,Gitee 提供了丰富的功能,比如代码仓库的创建、分支管理、代码审查等。 二、gite…

神经网络中层与层之间的关联

目录 1. 层与层之间的核心关联:数据流动与参数传递 1.1 数据流动(Forward Propagation) 1.2 参数传递(Backward Propagation) 2. 常见层与层之间的关联模式 2.1 典型全连接网络(如手写数字分类&#xf…

攻克 PDF 发票打印难题,提升财务效率

在财务日常工作里,处理 PDF 格式的数电发票常常让人头疼,特别是合并打印环节,操作繁杂琐碎。别烦恼,今天给大家推荐一款超实用的工具——电子发票专用批量打印工具,专为解决 PDF 数电发票的合并打印难题而生&#xff0…

将数据添加到 Couchbase 的 Analytics(分析)服务

要将数据添加到 Couchbase 的 Analytics(分析)服务中,您需要按照以下步骤进行操作。Couchbase Analytics 服务允许您在不影响事务性工作负载的情况下,对大量数据执行复杂的实时分析查询。 步骤 1:确保 Couchbase Analy…

脚本一键式启动Nginx、Mysql、Redis

此脚本包含拉取镜像、数据卷挂载、容器启动三大部分,可一键式安装三大环境 新建一个depoy.sh文件在服务器上,然后复制以下内容。 给脚本文件添加执行权限 chmod x depoy.sh # 文件的当前目录下 如果需要修改数据库MYSQL密码和Reids密码 MYSQL_ROO…

数据库原理实验报告:Powerdesigner建模E-R模型并转换表

注:此实验并不完整,仅供参考,如需完整版请私我留言 一、实验目的: 二、实验工具: 三、实验要求: 四、实验过程: 图文并茂,每一步都包含详细图片,总共11页word&#xff01…

【数据分析】索引与数据筛选(1)

索引与数据筛选 为什么要筛选数据? 因为在处理数据的实际应用中,数据的筛选很重要。Like:要选择数据集里的某几行某几列,或者将符合某种条件的数据筛选出来单独处理和分析,此时就要进行特定处理。 处理方案&#xf…