设计模式之简单工厂模式

ops/2024/9/18 12:45:41/ 标签: 设计模式, 简单工厂模式

一 、定义

简单工厂模式是一种创建型设计模式,它提供一个统一的接口来创建对象,而不需要客户端直接实例化对象。简单工厂模式通过封装创建对象的逻辑,简化了对象的创建过程,同时也提高了代码的可维护性和扩展性。缺点是:每当增加具体得产品类得时候,需要更改工厂类得内容,不合符开闭原则。

简单工厂模式的使用场景包括以下几种:

  1. 当需要根据不同的条件创建不同类型的对象时,可以使用简单工厂模式。例如,根据用户的权限级别创建不同类型的用户对象。

  2. 当需要统一管理创建对象的逻辑时,可以使用简单工厂模式。例如,通过一个工厂类来创建不同类型的数据库连接对象。

  3. 当对象的创建逻辑比较复杂,包含大量的条件判断和多个步骤时,可以使用简单工厂模式。它可以将复杂的创建过程封装在一个工厂类中,使客户端只需要关注获取对象即可。

二、代码示例

下面是一个简单工厂模式的示例代码:

// 定义一个产品接口
public interface Product {void operation();
}// 具体产品类A
public class ConcreteProductA implements Product {@Overridepublic void operation() {System.out.println("ConcreteProductA operation");}
}// 具体产品类B
public class ConcreteProductB implements Product {@Overridepublic void operation() {System.out.println("ConcreteProductB operation");}
}// 简单工厂类
public class SimpleFactory {public static Product createProduct(String type) {if (type.equals("A")) {return new ConcreteProductA();} else if (type.equals("B")) {return new ConcreteProductB();} else {throw new IllegalArgumentException("Invalid type: " + type);}}
}// 客户端使用简单工厂类创建产品
public class Client {public static void main(String[] args) {Product productA = SimpleFactory.createProduct("A");productA.operation();Product productB = SimpleFactory.createProduct("B");productB.operation();}
}

上面示例中,产品接口(Product)定义了产品的操作方法,具体产品类A和B实现了该接口。简单工厂类(SimpleFactory)根据客户端传入的参数来创建不同类型的产品对象。客户端(Client)使用简单工厂类来创建产品并调用其操作方法。

通过使用简单工厂模式,客户端不需要知道具体的产品类,只需通过简单工厂类来创建产品对象。当需要新增产品时,只需要在简单工厂类中添加对应的创建逻辑即可,无需修改客户端的代码。这提高了代码的可维护性和扩展性。

注意简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。
如有错误,欢迎指出,期待和大家共同进步-------------------------------------------------------------------------------------

在这里插入图片描述


http://www.ppmy.cn/ops/102894.html

相关文章

对于 OpenAI 最新发布 支持实时语音对话的模型GPT-4o,我想说

对于 OpenAI 最新发布 支持实时语音对话的模型GPT-4o,我想说 GPT-4oGPT-4o相比前代有哪些显著的技术提升?OpenAI发完GTP-4o,国内大模型行业还有哪些机会? 2024年5月14日凌晨,OpenAI宣布推出GPT-4o,GPT-4o在…

GAN Inversion(GAN 反演)

什么是Inversion? 来龙去脉: 在生成过程中,我们通过将z输入G,然后得到图像,但是你这个Z是不定的(随机的高斯分布噪声),所以即使你得到了质量好的生成图像,但是依然无法…

OprnHarmony驱动开发:外设器件HDF驱动移植规范

驱动移植 SoC芯片平台HDF驱动移植 驱动适配相关文件放置在drivers/adapter/platform中,对应有gpio,i2c,pwm,spi,uart,watchdog,都是通过HDF机制加载,本章节以gpio为例进行详细说明…

设计模式--装饰器模式

装饰器模式 装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许我们向一个现有的对象添加新的功能,同时又不改变其结构。就增加功能来说,装饰器模式相比生成子类更为灵活。这种模式创建了一个包装对象&#xf…

RabbitMQ如何保证消息不丢失(面试版)

下图是RabbitMQ消息的发送过程,在任何环节消息都有可能丢失: 生产者确认机制 开启生产者确认机制,确保生产者的消息能到达队列 RabbitMQ提供了publisher confirm 机制来避免消息发送到MQ过程中丢失 。 消息发送到MQ后 , 会返回一…

进阶SpringBoot之 Shiro(1)快速开始

Shiro 是一个 Java 的安全(权限)框架,它可以在 JavaSE、JavaEE 环境下使用 Shiro 可以实现认证、授权、加密、会话管理、Web 集成、缓存等 Shiro 官网 Shiro 中文文档 GitHub 下载 Shiro 下载源码,samples -> quickstart …

软件理论,图

对象或组件之间交互的图示工具,主要关注对象之间的消息传递和时间顺序 对象,生命线,消息, 使用场景: 需求分析:帮助理解系统功能和需求。设计阶段:展示系统中对象如何协作来实现功能。文档&a…

Kompose工具:转换Compose项目为K8S项目

Docker与Kubernetes系列 转换Compose项目为K8S项目 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.cs…

【Java设计模式】客户端会话模式:跨会话简化客户端数据

文章目录 【Java设计模式】客户端会话模式:跨会话简化客户端数据一、概述二、客户端会话设计模式的别名三、客户端会话设计模式的意图四、客户端会话模式的详细解释及实际示例五、Java中客户端会话模式的编程示例六、何时在Java中使用客户端会话模式七、客户端会话模…

Django-debug-toolbar的作用

Django-debug-toolbar是一款专为Django开发者设计的强大调试工具,其作用主要体现在以下几个方面: 性能分析和调优: SQL查询分析:Django-debug-toolbar能够显示每个页面请求中执行的SQL查询及其执行时间,帮助开发者识别…

Ubuntu 18.04升级gclibc为2.28版本

一、查看系统支持的 GLIBC 版本号 ​strings /lib/x86_64-linux-gnu/libc.so.6 | grep GLIBC_出现以下,说明到2.27版本,没有2.28版本,所以我们需要手动安装 GLIBC_2.2.5 GLIBC_2.2.6 GLIBC_2.3 GLIBC_2.3.2 GLIBC_2.3.3 GLIBC_2.3.4 GLIBC_…

三防平板:定制化服务的趋势——以智慧医疗为例

随着科技的飞速发展,三防平板产品凭借其坚固耐用、适应复杂环境的特性,在众多行业领域中崭露头角。而在AI迅速增长的今天,AI智慧医疗成为了一个备受关注的热点,它不仅推动了医疗行业的数字化转型,也为三防平板产品的定…

OSI七层模型中的数据链路层

图片:数据帧的格式 这里面的一个关键点是,数据的源IP和目标IP在哪里? 就在图中的“数据”里面,这个“数据”也就是网络层的数据包,如果是TCP类型的数据包,数据包里面就包含TCP类型的首部信息,…

Seata 的四种模式一览

文章目录 1. XA模式1.1 两阶段提交1.2 Seata 的 XA 模型1.3 XA 优缺点1.4 实现XA模式 2. AT 模式2.1 Seata 的 AT 模型2.2 AT 流程梳理2.3 AT 与 XA 的区别2.4 AT 的脏写问题2.5 AT 的优缺点2.6 实现 AT 模式 3. TCC模式3.1 流程分析3.2 Seata的TCC模型3.3 优缺点 4. SAGA模式4…

携程:从MySQL迁移OceanBase的数据库发布系统实践

作者简介:杨晓军 现就职于携程的数据库团队,主要负责携程数据库的研发与管理,专注于提升数据库的稳定性。 自分布式关系型数据库OceanBase开源以来,携程已经在线上环境中进行了广泛的应用,取代了原先以MySQL为主力的业…

基于 XILINX FPGA 的 Cameralink Full 模式相机采集系统技术分析方案

《基于 XILINX FPGA 的 Cameralink Full 模式相机采集系统技术分析方案》 **一、引言** 随着科技的不断发展,对图像采集和处理的要求越来越高。基于 XILINX FPGA 的 Cameralink Full 模式相机采集系统以其强大的功能和高性能,为众多领域提供了高效的图…

RabbitMQ 集群与高可用性

目录 单节点与集群部署 1.1. 单节点部署 1.2. 集群部署 镜像队列 1.定义与工作原理 2. 配置镜像队列 3.应用场景 4. 优缺点 5. Java 示例 分布式部署 1. 分布式部署的主要目标 2. 典型架构设计 3. RabbitMQ 分布式部署的关键技术 4. 部署策略和实践 5. 分布式部署…

垃圾收集器与内存分配策略

对象引用以及回收 如何判断对象已死 引用计数算法 在对象当中添加一个引用计数器,每当有一个地方引用它,计数器就加一,引用失效的时候,计数器减一,初始化计数器为1,当计数器为0的时候,对象就…

Spring Boot常用注解及其含义

Spring Boot常用注解及其含义 注解含义SpringBootApplication标记主应用程序类,包含Configuration、EnableAutoConfiguration和ComponentScan。EnableAutoConfiguration启用Spring Boot的自动配置功能,根据类路径中的依赖自动配置应用程序。Configurati…

黑神话悟空-俯视地图-真实光线-修改视野-人物替换 合集mod

俯视地图说明:使用后就可以在游戏内打开俯瞰大地图,来确认各种支线,并且还能看到地图上给玩家准备好的标记,不需要查询攻略就能轻松做完支线。 N键-打开俯瞰模式 十字键—移动镜头 鼠标滚轮-缩放 O键-镜头复位 I键&#xff1a…