设计模式-抽象工厂模式 Java

【新手必看】蓝牙的HOGP和HID、GATT有什么区别和联系 让新手宏观了解蓝牙HOGP、HID、GATT这三个协议的区别和联系 阅读详情

模式概述

抽象工厂模式(Abstract Factory Pattern)提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。它围绕一个超级工厂(抽象工厂)创建其他工厂,是工厂方法模式的升级版,能创建多个产品族中的对象。

简单代码示例

1. 定义抽象产品接口

// 按钮接口
interface Button {
    void display();
}

// 文本框接口
interface TextField {
    void display();
}

2. 实现具体产品

// 蓝色主题按钮
class BlueButton implements Button {
    @Override
    public void display() {
        System.out.println("显示蓝色按钮");
    }
}

// 蓝色主题文本框
class BlueTextField implements TextField {
    @Override
    public void display() {
        System.out.println("显示蓝色文本框");
    }
}

// 红色主题按钮
class RedButton implements Button {
    @Override
    public void display() {
        System.out.println("显示红色按钮");
    }
}

// 红色主题文本框
class RedTextField implements TextField {
    @Override
    public void display() {
        System.out.println("显示红色文本框");
    }
}

3. 定义抽象工厂

interface SkinFactory {
    Button createButton();
    TextField createTextField();
}

4. 实现具体工厂

// 蓝色主题工厂
class BlueSkinFactory implements SkinFactory {
    @Override
    public Button createButton() {
        return new BlueButton();
    }

    @Override
    public TextField createTextField() {
        return new BlueTextField();
    }
}

// 红色主题工厂
class RedSkinFactory implements SkinFactory {
    @Override
    public Button createButton() {
        return new RedButton();
    }

    @Override
    public TextField createTextField() {
        return new RedTextField();
    }
}

5. 客户端使用

public class Client {
    public static void main(String[] args) {
        // 创建蓝色主题系列
        SkinFactory blueFactory = new BlueSkinFactory();
        Button blueButton = blueFactory.createButton();
        TextField blueTextField = blueFactory.createTextField();
        
        blueButton.display();      // 输出: 显示蓝色按钮
        blueTextField.display();   // 输出: 显示蓝色文本框

        // 创建红色主题系列
        SkinFactory redFactory = new RedSkinFactory();
        Button redButton = redFactory.createButton();
        TextField redTextField = redFactory.createTextField();
        
        redButton.display();      // 输出: 显示红色按钮
        redTextField.display();    // 输出: 显示红色文本框
    }
}

技术细节

1.模式组成

组件职责说明
抽象产品为产品对象声明接口
具体产品定义具体工厂创建的产品对象
抽象工厂声明创建抽象产品对象的接口
具体工厂实实现创建具体产品对象的操作

2.优点与缺点

优点:

  • 产品族一致性:保证客户端始终使用同一个产品族中的对象
  • 切换产品族容易:只需改变具体工厂即可切换整个产品系列
  • 高内聚低耦合:将产品创建代码集中在工厂中,便于维护

缺点:

  • 扩展困难:添加新产品需要修改抽象工厂接口及所有实现类
  • 复杂度增加:增加了系统的抽象性和理解难度

模式应用

在 Spring 框架中,抽象工厂模式被广泛应用于核心容器的设计中

  • BeanFactory 接口
BeanFactory factory = new XmlBeanFactory(new ClassPathResource("beans.xml"));
MyService service = factory.getBean(MyService.class); // 通过抽象接口获取产品
  • ApplicationContext 接口
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
MyService service = context.getBean(MyService.class); // 统一接口获取产品
【Power Compiler手册】4.saif文件 功耗计算的准确性取决于切换活动数据的准确性。这些数据是通过使用RTL仿真或门级仿真生成的,并存储在SAIF文件中。在执行功耗优化和分析之前,应该使用SAIF文件来反标设计对象上的切换活动信息。SAIF是由Synopsys支持的ASCII格式,用于促进不同Synopsys工具之间的信息交换(参见IEEE 1801标准,附录J)。使用`read_saif`命令读取SAIF文件,使用`write_saif`命令写出SAIF文件。有关更多信息,请参见`read_saif`和`write_saif`命令的手册页。 阅读详情

相关推荐

【ArcGIS教程】基于DEM数据的洪水淹没分析——提取淹没区并计算淹没区洪水量

使用ArcGIS开展洪水淹没区分析、提取淹没区并计算淹没区洪水量的详细说明,如果想获取教程中实验数据,请关注微信公众号【GIS小能手】然后在后台留言。

weixin_45469245的博客 6819

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

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

空 854

(MIUI)小米手机录音文件深度寻踪:从系统缓存到数据目录的实战解析

本文深入解析了MIUI系统中录音文件丢失的常见原因及解决方案,包括系统升级兼容性问题、应用缓存机制异常和存储权限变动。通过实战操作指南,详细介绍了如何从系统目录、数据库层面恢复录音文件,并提供了预防措施和自动化备份方案,帮助小米手机用户有效找回重要录音数据。

weixin_42699679的博客 518

设计模式(Design Pattern) - 创建型模式(Creational Pattern) - 抽象工厂模式(Abstract Factory) - Java实现

设计模式(Design Pattern) - 创建型模式(Creational Pattern) - 抽象工厂模式(Abstract Factory) 比工厂模式更抽象的方法,效果:增加功能不必需改历史代码。

Z 446

THUCNews新闻文本分类-tfidf+sklearn

本文使用的是和鲸社区现有数据集,代码也在和鲸社区公开,fork之后可以直接运行。 本文中所用的数据集清华NLP组提供的THUCNews新闻文本分类数据集的一个子集(原始的数据集大约74万篇文档,训练起来需要花较长的时间)。 本次训练使用了其中的体育, 财经, 房产, 家居, 教育, 科技, 时尚, 时政, 游戏, 娱乐10个分类,每个分类6500条,总共65000条新闻数据。项目在和鲸社区的平台上跑的,数据集直接引用了和鲸的数据集,每个分类6500条,总共65000条新闻数据。 数据集划分如下: cnews

wmq104的博客 4591

从mseed到SAC格式转换全攻略:mseed2sac工具安装与批量处理技巧

本文详细介绍了如何将mseed格式的地震数据高效转换为SAC格式,涵盖mseed2sac工具的安装、单文件转换技巧、批量处理自动化实现以及元数据高级处理策略。通过具体命令和脚本示例,帮助地震学研究者快速掌握数据预处理的关键技术,提升波形数据分析效率。

ruby5的博客 927

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

Python自动化测试报告:飞书群机器人消息卡片实战

本文详细介绍了如何利用Python和飞书群机器人实现自动化测试报告的智能通知。通过构建可定制的消息卡片,将测试结果(如通过数、失败数)以清晰、美观的格式自动推送至团队群聊,并支持一键跳转查看详细报告,从而显著提升团队协作与问题响应效率。

k6l7m8n9的博客 811

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

  本文章转载大佬CBF4LIFE的文章 博客地址:https://www.cnblogs.com/cbf4life/           好了,我们继续上一节课,上一节讲到女娲造人,人是造出来了,世界时热闹了,可是低头一看,都 是清一色的类型,缺少关爱、仇恨、喜怒哀乐等情绪,人类的生命太平淡了,女娲一想,猛然一拍脑袋, Shit!忘记给人类定义性别了,那怎么办?抹掉重来,然后就把人类重新洗牌...

宇智波带土 207

【PPS便携式移动电源】如何透彻了解便携式移动电源,仅需要十分钟阅读即可

PPS 便携式储能电源的发展前景广阔,受益于户外经济爆发、应急备灾需求提升及 “双碳” 政策支持,全球市场规模预计持续增长,2025 年出货量将达 2380 万台,未来将向大功率大容量、光充一体化、智能化方向发展,还会拓展家庭储能、移动医疗等新场景,同时钠离子电池应用、双向逆变技术升级将进一步推动行业发展。

昔时扬尘处 272

Host是如何与EC通信的

EC中有三个寄存器,分别为状态寄存器EC_SC、命令寄存器EC_SC和数据寄存器EC_DATA。而状态寄存器和命令寄存器同属于一个寄存器,这几个寄存器遵循着ACPI EC规范。host可以根据ACPI协议规范来与EC进行通信。 以下是个寄存器的详细介绍。 EC状态寄存器(EC_SC(R)),该寄存器是一个只读寄存器,它反映了此时EC接口的状态。下图为该寄存器表。 EC状态寄存器表中各位的具体含义: OBF(Output Buffer is Full),该状态位置1...

qq_30135687的博客 3694

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

一、概述 二、适用chang

小吕丶Code阶区 3847

学Simulink——基于大数据处理与云计算的场景实例:无人机与云计算中心之间的高效数据传输链路设计

本文以无人机与云计算中心的高效数据传输链路设计为例,手把手指导使用Simulink进行系统级建模。针对智慧城市、灾害监测等场景中无人机采集的海量数据(视频、图像、点云等),构建包含数据源、传输协议、无线链路、云接入和性能分析的五层架构模型。通过智能数据压缩、多链路聚合和QoS优先级调度等关键技术,实现5G+Wi-Fi等多通信技术的自适应切换。仿真结果表明,5G+Wi-Fi链路聚合在城市环境中表现最优,而4G+卫星组合适合偏远地区。该模型为无人机实时数据传输提供了有效的设计方法和优化方向,可拓展至边缘计算、A

xiaoheshang_123的博客 120

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

本文主要介绍Java设计模式——抽象工厂模式,入门级别使用

Dust_heart的博客 878

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

数学建模模型总结

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

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

抽象工厂模式是对简单工厂模式的一个变种,它允许通过一个统一的接口来创建不同的产品实例,而无需指定具体的子类。在这个模式中,我们只关心产品的抽象接口,而将具体的产品实现留给子类去实现。这样,我们可以通过创建不同的工厂对象来创建不同的产品实例,而无需关心它们实际实现的是哪个具体产品。

qq_42872720的博客 2616

廖雪峰Python教程[完整版]

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

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

在上一篇中,我们对《中餐厅》的生产模式进行了改良,不同的菜系由不同的“工厂”生产。但是我们忽略了一个很重要的问题,在生产各种菜系时,各种菜系中所使用的配料谁来生产?比如湘菜和川菜中都使用了辣椒作为配料,但是这两种辣椒品种又是不一样的。这就需要我们了解今天要介绍的“抽象工厂模式”了。        抽象工厂模式是工厂方法模式的升级,他用来创建一组相关或者相互依赖的对象。他与工厂方法模式的区别就在于

CoderLover 374

WINCC7.3破解文件

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

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

抽象工厂模式(Abstract Factory Pattern)的介绍、应用场景、优缺点以及代码实现。

weixin_70044963的博客 536

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

一、抽象工厂模式定义

奔跑8蜗牛 385

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

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

fuu123f的博客 196

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

抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。抽象工厂模式是所有形式的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式的主要优点是隔离了具体类的生成,使得客户并不需要知道什么被创建,而且每次可以通过具体工厂类创建一个产品族中的多个对象,增加或者替换产品族比较方便,增加新的具体工厂和产品族很方便;主要缺点在于增加新的产品等级结构很复杂,需要修改抽象工厂和所有的具体工厂类,对“开闭原则”的支持呈现倾斜性。

白话机器学习 301

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

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

yj_android_develop的博客 740

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

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

Fatter$hday的博客 1468

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

抽象工厂模式(Abstract Factory),是23种设计模式之一。抽象工厂模式是这样子定义的: 抽象工厂模式,提供一个创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类。 在学习抽象工厂模式之前,最好熟悉简单工厂模式以及工厂方法模式,这样对理解抽象工厂模式会有一定帮助,而且抽象工厂模式是基于工厂方法模式而来的。如果你还没有了解到什么是简单工厂模式以及工厂方法模式...

扛麻袋的少年的博客 1455

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

抽象工厂模式 工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。 public interface Sender { public void Send(); } public class MailSender implements Sender { @Ove

weixin_43920664的博客 122

Java常用设计模式之抽象工厂模式

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

. 421

浅谈Java设计模式之——抽象工厂模式

上一篇文章我们介绍了一下简单工厂模式,这一节就接着来说抽象工厂模式 浅谈Java设计模式之——简单工厂模式 一、什么是简单抽象工厂模式 抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的。抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象。 看了上面一大堆你可能还是没看懂具体是什么意思,下面通过一个具体的案例来说明一下: 二、假...

上辈子作恶多端,这辈子写前端。 1045
上一篇: 设计模式-工厂方法模式 Java
下一篇: 设计模式-构建器模式 Java
刘火锅
博客等级 码龄7年 121粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值