《设计模式》-- 抽象工厂模式

设计模式——抽象工厂模式(Abstract Factory) 要想正确的理解设计模式,首先必须明确它是为了解决什么问题而提出来的。 抽象设计模式概念:         针对抽象工厂这个设计模式,我查找了不少资料,感觉只有涉及产品级别和产品族的才是理解了抽象工厂设计模式的精髓,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式针对的是多个产品等级结构。有些观点认为抽象工厂模式是为了解决客户端代码与工厂类的耦合问题,我认为这种观点的解决方案只是简单工厂模式 阅读详情

抽象工厂

认识

抽象工厂是同时创建多个接口(多个产品)的实现类对象,实现解耦合

思考

  1. 抽象工厂模式能够处理更加复杂的对象的细节封装,可以对一个产品簇(多个接口)封装细节,对外部调用实现透明。而简单工厂模式和工厂方法模式都是对一个产品(一个接口)进行操作。
  2. 抽象工厂模式存在多个工厂实现类,可以结合简单工厂模式,根据type创建不同的抽象工厂实现类,进一步封装内部细节,进一步跟client端解耦合
  3. 一切复杂对象的创建都可以使用工厂模式

优缺点

  • 优点:
    1. 分离了接口和实现
    2. 封装了内部实现细节
    3. 扩展新的工厂实现类容易,这需要再定义一个抽象工厂实现类
  • 缺点
    1. 扩展新的产品类难,当新增加一个产品接口的时候,就需要同时修改所有的工厂实现类的源代码
    2. 容易造成类层次复杂

使用场景

当工厂模式需要在工厂方法中操作多个产品(接口)的时候使用抽象工厂模式

UML图

工厂需要操作多个接口

image

代码实现

/**
 * 产品接口 A
 *
 */
public interface IProductA {
      public void operation(); 
}
/**
 * 产品实现类A1
 */
public class ConcreateProductA1 implements IProductA{

    public void operation() {
        System.out.println("创建产品A1");
    }
}
/**
 * 产品实现类A2
 */
public class ConcreateProductA2 implements IProductA{

    public void operation() {
        System.out.println("创建产品2");
    }
}
/**
 * 产品接口B 
 *
 */
public interface IProductB {
      public void operation(); 
}
/**
 * 产品实现类B1
 */
public class ConcreateProductB1 implements IProductB{

    public void operation() {
        System.out.println("创建产品B1");
    }
}
/**
 * 产品实现类B2
 */
public class ConcreateProductB2 implements IProductB{

    public void operation() {
        System.out.println("创建产品B2");
    }
}
/**
 * 抽象工厂类 
 *
 */
public abstract class Factory {

    /**
     * 定义抽象,具体实现延迟到子类中实现
     */
    protected abstract IProductA getProductA();
    protected abstract IProductB getProductB();

    /**
     * 提供方法供客户端调用
     */
    public void createProduct(){
        //进行操作
        IProductA productA = this.getProductA();
        IProductB productB = this.getProductB();
        //进行操作
    }
}
public class ConcreateFacotry1 extends Factory{

    /**
     * 实现类中创建对应的productA的子类返回
     */
    @Override
    protected IProductA getProductA() {
        return new ConcreateProductA1();
    }

    /**
     * 实现类中创建对应的productB的子类返回
     */
    @Override
    protected IProductB getProductB() {
        return new ConcreateProductB1();
    }
}
public class ConcreateFacotry2 extends Factory{

    /**
     * 实现类中创建对应的productA的子类返回
     */
    @Override
    protected IProductA getProductA() {
        return new ConcreateProductA2();
    }

    /**
     * 实现类中创建对应的productB的子类返回
     */
    @Override
    protected IProductB getProductB() {
        return new ConcreateProductB2();
    }
}
/**
 * 客户端调用
 */
public class Client{

    public static void main(String[] args) {
        //客户端调用 Factory的 ConcreateFacotry1 实现类创建对象
        Factory factory1 = new ConcreateFacotry1();
        factory1.createProduct();

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

相关推荐

密码学新手必看:三大顶级会议论文下载与阅读指南(附完整资源链接)

本文为密码学新手提供了系统性的三大顶级会议(Crypto、Eurocrypt、Asiacrypt)论文学习指南。内容涵盖如何高效获取最新论文资源、结构化精读论文的方法论,以及将理论转化为代码实践的路径,旨在帮助初学者快速构建密码学知识体系并应用于研究。

weixin_29214691的博客 317

设计模式:工厂模式,解除耦合的利器

工厂模式是使用频率很高的一种设计模式,在面试中也经常问到,今天我们就来学习它。 为什么要用工厂模式? 解答这个问题前,我们先来了解什么是工厂模式。 工厂模式其实也称创建模式,是用于创建对象的一种方式。本质上就是用工厂方法来代替new实例化对象。 举个例子:我们在编写代码的时候,在一个A类中通过new的方式实例化了类B,那么A类和B类之间就存在耦合,如果以后修改了B类的代码和使用方式,例如需要在...

916

基于OpenAI Agents构建多智能体工作流:从原理到实战

多智能体系统(Multi-Agent System)是人工智能领域的重要分支,它通过多个智能体(Agent)的协作与交互,解决单一智能体难以处理的复杂任务。其核心原理在于将任务分解、分配与协调,每个智能体具备特定能力,通过通信机制实现信息共享与决策协同。在工程实践中,多智能体框架的价值在于提升任务处理效率、增强系统鲁棒性,并支持模块化开发。典型的应用场景包括自动化工作流编排、复杂问题求解以及人机协同交互。本文以OpenAI Agents SDK为例,深入探讨如何利用其提供的智能体(Agent)、会话(Ses

weixin_28725959的博客 603

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

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

小威的博客 2万+

Vector CANoe VT2516A实战:从硬件连接到CAPL脚本的完整配置指南

本文详细介绍了Vector CANoe VT2516A板卡从硬件连接到CAPL脚本编写的完整配置指南。涵盖硬件接线原则、VT System配置避坑技巧、系统变量创建规范、可视化Panel设计、CAPL脚本调试及典型故障排查案例,帮助工程师快速掌握VT2516A板卡的应用实践,提升汽车电子测试效率。

weixin_30608503的博客 254

告别云端依赖:手把手教你在Windows 10/11上离线部署WhisperDesktop(含模型下载避坑指南)

本文详细介绍了如何在Windows 10/11上离线部署WhisperDesktop,包括硬件要求、模型下载、环境配置和实战应用。通过本地部署,用户可以实现高效的语音转文字功能,无需依赖云端服务,特别适合注重数据隐私和需要离线工作的场景。

weixin_33736048的博客 322

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

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

weixin_45226668的博客 997

深入解析GEM5 McPAT NoC功耗模型:从arbiter电容计算到微架构关联

本文深入解析GEM5 McPAT NoC功耗模型,重点探讨arbiter电容计算与微架构的关联。通过拆解动态功耗公式和四类电容的物理本质,揭示能量与功率的转换关系,并提供参数调试和模型精度优化的实战技巧,帮助开发者更准确地预测和优化NoC功耗。

weixin_29305313的博客 201

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

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

J^T的博客 2362

uniapp运行钉钉小程序

因项目原因,公司需要在钉钉里面开发小程序。之前用uniapp开发过app,H5,小程序。还真没尝试过钉钉小程序,今天就简单的记录下uniapp运行钉钉小程序中的过程。

YL 2919

10.2 全栈 CRUD 工程结构搭建:Cursor 4 步初始化 + 3 层目录规范

揭示 Cursor 工程初始化中 4 个关键动作如何将 AI 上下文感知能力从 30% 提升至 85%,包括用 pnpm create 显式声明结构契约、通过 monorepo.config.json 设定 workspace 根以支持跨包类型引用、在 shared 包中固化共享类型与协议,以及后续

weixin_42545292的博客 67

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

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

君临天下的博客 991

软硬件融合加速技术系列文章

目录 文章目录目录计算机组成原理Linux 操作系统原理处理器进程管理内存管理I/O 系统文件系统网络协议栈资源管理设备管理GPUFPGASmartNIC/DPU 计算机组成原理 《计算机组成原理 — 冯诺依曼体系结构》 《计算机组成原理 — 基本硬件设备》 《计算机组成原理 — CPU 中央处理器》 《计算机组成原理 — 指令系统》 《计算机组成原理 — 总线系统》 《计算机组成原理 — 存储系统》 《计算机组成原理 — 输入输出系统 — 存储控制器接口类型》 《计算机组成原理 — 服务器》 《计算机组成

烟云的计算 6804

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

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

1106

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

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

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

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

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

空 854

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

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

look4liming的专栏 320

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

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

ShuSheng007的程序人生 7077

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

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

敲代码的小小酥的博客 522

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

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

Meteors.的博客 1246

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

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

gcdqwer的博客 304

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

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

在未来等你的专栏 1125

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

抽象工厂模式的基本思想是将一些相关的产品组成一个“产品族”,由同一个工厂统一生产。在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法具有唯一性,一般情况下,一个具体工厂中只有一个或者一组重载的工厂方法。但是有时候我们希望一个工厂可以提供多个产品对象,而不是单一的产品对象,如一个电器工厂,它可以生产电视机、电冰箱、空调等多种电器,而不是只生产某一种电器。

ddm 1433

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

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

fuu123f的博客 196

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

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

Genven_Liang的博客 457

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

抽象工厂模式,顾名思义就是将工厂模式进行抽象化。 我建议在了解抽象工厂模式这个概念前,我们先了解一下工厂模式,这样会有助于您了解抽象工厂模式。 设计模式——工厂模式(Factory Pattern) 看到这里的小伙伴们,默认就是比较了解工厂模式的啦。那么其实抽象工厂模式其实就是将工厂模式生产的产品改为生产工厂。 接下来我继续借用一张图片来表明抽象工厂的概念。 ...

虚心学习,和气编码 599
上一篇: 《设计模式》-- 工厂方法模式
下一篇: 《设计模式》-- 构建者模式
fight_zhi
博客等级 码龄14年 27粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值