设计模式——抽象工厂模式

定义:

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

概述:一个工厂可以提供创建多种相关产品的接口,而无需像工厂方法一样,为每一个产品都提供一个具体工厂

以下是抽象工厂模式的一些常见用途:

  1. 系统独立性:抽象工厂模式可以让客户端与具体类的创建逻辑分离,使得客户端代码不依赖于具体类,从而提高了系统的独立性。

  2. 产品族的创建:抽象工厂模式通常用于创建一系列相关或相互依赖的产品,这些产品被设计成一起使用,例如,在图形用户界面 (GUI) 应用程序中,可能需要一套相同风格的按钮、文本框和窗口。

  3. 跨平台兼容性:抽象工厂模式可以帮助在不同的平台上创建相同风格的产品,而无需修改客户端代码。例如,在开发跨平台的游戏时,可以使用抽象工厂模式创建适配于不同平台的相同类型的游戏对象。

抽象工厂模式核心角色:
 

  1. 抽象工厂(Abstract Factory):声明了一组用于创建产品对象的方法,每个方法对应一种产品类型。抽象工厂可以是接口或抽象类。
  2. 具体工厂(Concrete Factory):实现了抽象工厂接口,负责创建具体产品对象的实例。
  3. 抽象产品(Abstract Product):定义了一组产品对象的共同接口或抽象类,描述了产品对象的公共方法。
  4. 具体产品(Concrete Product):实现了抽象产品接口,定义了具体产品的特定行为和属性。

抽象工厂模式通常涉及一族相关的产品,每个具体工厂类负责创建该族中的具体产品。客户端通过使用抽象工厂接口来创建产品对象,而不需要直接使用具体产品的实现类。

示例:

假设我们有两种类型的电脑:台式机和笔记本电脑,每种电脑都有不同的规格:高性能和普通型。我们将使用抽象工厂模式来创建这些电脑。

代码:


// 台式机接口
interface Desktop {void displayInfo();
}// 笔记本电脑接口
interface Laptop {void displayInfo();
}// 具体的工厂类
class ConcreteComputerFactory implements ComputerFactory {@Overridepublic Desktop createDesktop() {return new RegularDesktop();}@Overridepublic Laptop createLaptop() {return new HighPerformanceLaptop();}
}// 普通型台式机
class RegularDesktop implements Desktop {@Overridepublic void displayInfo() {System.out.println("这是一台普通的台式电脑。");}
}// 高性能笔记本电脑
class HighPerformanceLaptop implements Laptop {@Overridepublic void displayInfo() {System.out.println("这是一台高性能的笔记本电脑。");}
}// 电脑工厂接口
interface ComputerFactory {Desktop createDesktop(); // 创建台式机Laptop createLaptop();   // 创建笔记本电脑
}public class Main {public static void main(String[] args) {// 创建具体的工厂ComputerFactory factory = new ConcreteComputerFactory();// 创建台式机Desktop desktop = factory.createDesktop();desktop.displayInfo();// 创建笔记本电脑Laptop laptop = factory.createLaptop();laptop.displayInfo();}
}

运行截图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/264784.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

发现了一个老师都该知道的成绩发布神器!

老师们,你们是不是还在为每次考试后的成绩发布而烦恼?手动整理、逐个通知,简直让人头疼不已! 想象一下,你只需将成绩整理成Excel表格,一键上传,立马就能生成一个专属的成绩查询小程序。是不是感…

Yolov8有效涨点:YOLOv8-AM,添加多种注意力模块提高检测精度,含代码,超详细

前言 2023 年,Ultralytics 推出了最新版本的 YOLO 模型。注意力机制是提高模型性能最热门的方法之一。 本次介绍的是YOLOv8-AM,它将注意力机制融入到原始的YOLOv8架构中。具体来说,我们分别采用四个注意力模块:卷积块注意力模块…

关于电脑功耗与电费消耗的问题,你了解多少?

一台电脑24小时运行需要多少电量? 大家好,我是一名拥有多年维修经验的上门维修师傅。 今天我就来回答大家关于电脑24小时运行需要多少电量的问题。 电脑功耗及用电量 首先我们来看看电脑的功耗情况。 普通台式电脑的功耗通常在300瓦左右,即…

vulnhub----hackme2-DHCP靶机

文章目录 一,信息收集1.网段探测2.端口扫描3.目录扫描 二,信息分析三,sql注入1.判断SQL注入2.查询显示位3.查询注入点4.查询库5.查询表6.查字段7. 查user表中的值8.登陆superadmin用户 四,漏洞利用文件上传命令执行蚁剑连接 五&am…

Ansible group模块 该模块主要用于添加或删除组。

目录 创建组验证删除组验证删除一个不存在的组 常用的选项如下: gid  #设置组的GID号 name  #指定组的名称 state  #指定组的状态,默认为创建,设置值为absent为删除 system  #设置值为yes,表示创建为系统组 创建组 ansib…

图扑数字孪生技术在航空航天方面的应用

"数字孪生"这一概念最早就是在航空航天领域使用,目的在于处理航天器的健康维护和保护问题。图扑软件依托自主研发的 HT for Web 产品,实现对民航机场、民航飞机、火箭发射、科技展馆的数字孪生展示。 图扑 HT 数字孪生技术助力航空航天数字孪…

nginx学习

nginx验证修改nginx.conf文件是否正确./sbin/nginx -t重启nginx./sbin/nginx -s reload一、nginx简介 1、什么是nginx,有什么特点? nginx: 是高性能的HTTP和反向代理web服务器 特点: 内存占有少,处理并发能力强。 2、正向代理…

【Go语言】Go语言中的数组

Go语言中的数组 1 数组的初始化和定义 在 Go 语言中,数组是固定长度的、同一类型的数据集合。数组中包含的每个数据项被称为数组元素,一个数组包含的元素个数被称为数组的长度。 在 Go 语言中,你可以通过 [] 来标识数组类型,但…

3D生成式AI模型与工具

当谈到技术炒作时,人工智能正在超越虚拟世界,吸引世界各地企业和消费者的注意力。 但人工智能可以进一步增强虚拟世界,至少在某种意义上:资产创造。 AI 有潜力扩大用于虚拟环境的 3D 资产的创建。 AI 3D生成使用人工智能生成3D模…

华为高级路由技术 2023-2024

2023-2024 一、2.26路由协议版本优先级和度量主和备路由最长匹配原则递归路由和默认路由 一、2.26 路由协议版本 (1)RIP: IPv4网:RIPv1,RIPv2(v1和v2 不兼容) IPv6网:RIPng(Next g…

备战蓝桥杯Day17 - 链表

链表 基本概念 链表是由一系列节点组成的元素集合。 每个节点包含两部分:数据域 item 、指向下一个节点的指针 next 通过节点之间的相互链接,形成一个链表 1. 链表的初始化 # 手动建立链表 # 链表的初始化 class Node(object):def __init__(self, …

WinForms中的Timer探究:Form Timer与Thread Timer的差异

WinForms中的Timer探究:Form Timer与Thread Timer的差异 在Windows Forms(WinForms)应用程序开发中,定时器(Timer)是一个常用的组件,它允许我们执行定时任务,如界面更新、周期性数据…

spring Boot快速入门

快速入门为主主要届介绍java web接口API的编写 java编辑器首选IntelliJ IDEA 官方链接:https://www.jetbrains.com/idea/ IEDA 前言 实例项目主要是web端API接口的使用,项目使用mysql数据库,把从数据库中的数据的查询出来后通过接口json数…

腾讯云4核8G服务器支持多少人在线访问?

腾讯云4核8G服务器支持多少人在线访问?支持25人同时访问。实际上程序效率不同支持人数在线人数不同,公网带宽也是影响4核8G服务器并发数的一大因素,假设公网带宽太小,流量直接卡在入口,4核8G配置的CPU内存也会造成计算…

Spring 的三级缓存机制

Spring 的三级缓存机制 Spring 的三级缓存机制是解决循环依赖的关键。 Spring 框架为了解决循环依赖问题,设计了一套三级缓存机制。这三级缓存分别是: 一级缓存 singletonObjects:这是最常规的缓存,用于存放完全初始化好的 bea…

【服务器数据恢复】FreeNAS+ESXi虚拟机数据恢复案例

服务器数据恢复环境: 一台服务器通过FreeNAS(本案例使用的是UFS2文件系统)实现iSCSI存储,整个UFS2文件系统作为一个文件挂载到ESXi虚拟化系统(安装在另外2台服务器上)上。该虚拟化系统一共有5台虚拟机&…

什么是高可用架构

一、什么是高可用 在运维中,经常听到高可用,那么什么是高可用架构呢?通俗点讲,高可用就是在服务故障,节点宕机的情况下,业务能够保证不中断,服务正常运行。 举个例子,支付宝&#…

开源大模型LLM大爆发,数据竞赛已开启!如何使用FuseLLM实现大语言模型的知识融合?

开源大模型LLM大爆发,数据竞赛已开启!如何使用FuseLLM实现大语言模型的知识融合? 现在大多数人都知道LLM是什么,以及可以做什么。 人们讨论着它的优缺点,畅想着它的未来, 向往着真正的AGI,又有…

弱结构化日志 Flink SQL 怎么写?SLS SPL 来帮忙

作者:潘伟龙(豁朗) 背景 日志服务 SLS 是云原生观测与分析平台,为 Log、Metric、Trace 等数据提供大规模、低成本、实时的平台化服务,基于日志服务的便捷的数据接入能力,可以将系统日志、业务日志等接入 …

MS2403隔离Σ-Δ调制器

产品简述 MS2403 是一款二阶 Σ-Δ 调制器,集成片上数字隔离器,能 将模拟输入信号转换为高速 1 位码流。调制器对输入信号连续 采样,无需外部采样保持电路。模拟信号输入满量程为 320 mV ,转换后的数字码流的最高数据速率为 2…