首页 > 其他分享 >软件工程中的创建型设计模式:工厂方法模式与抽象工厂模式

软件工程中的创建型设计模式:工厂方法模式与抽象工厂模式

时间:2024-11-08 14:17:10浏览次数:7  
标签:创建 接口 工厂 抽象 模式 产品 设计模式

目录

1. 工厂方法模式(Factory Method Pattern)

1.1 核心概念

1.2 应用场景

1.3 优点

2. 抽象工厂模式(Abstract Factory Pattern)

2.1 核心概念

2.2 应用场景

2.3 优点

3. 联系与区别

4. 拓展知识

5. 结语


        在软件工程领域,我们经常探讨如何通过设计模式来提高代码的可维护性、可扩展性和灵活性。在众多设计模式中,创建型模式尤其重要,因为它们直接关系到对象的创建和管理。今天,我想和大家深入探讨两种常用的创建型设计模式:工厂方法模式和抽象工厂模式。

1. 工厂方法模式(Factory Method Pattern)

        工厂方法模式是一种简单而强大的设计模式,它定义了一个用于创建对象的接口,但让子类决定实例化哪一个类。这种模式的关键在于将对象的创建推迟到子类中,从而使得类的实例化与使用分离,提高了代码的灵活性。

1.1 核心概念

  • 产品接口:定义了对象的公共接口。
  • 具体产品:实现了产品接口的具体类。
  • 工厂接口:声明了创建产品的方法。
  • 具体工厂:实现了工厂接口,并创建具体的产品实例。

1.2 应用场景

        当你需要创建一系列相关或不相关的对象,并且这些对象的创建逻辑相对简单时,工厂方法模式是一个不错的选择。例如,在创建不同类型的日志记录器时,你可以使用工厂方法模式来根据不同的配置创建不同的日志记录器实例。

1.3 优点

  • 代码解耦:客户端代码与具体产品类解耦。
  • 扩展性:添加新产品时,只需添加新的具体产品和工厂类,无需修改现有代码。

2. 抽象工厂模式(Abstract Factory Pattern)

        抽象工厂模式则更为复杂,它提供了一个接口,用于创建一系列相关或相互依赖的对象,而不需要指定它们的具体类。这种模式适用于对象族的创建,其中对象之间存在一定的依赖关系。

2.1 核心概念

  • 产品族:一系列相关的产品。
  • 抽象工厂:定义了创建一系列产品的接口。
  • 具体工厂:实现了抽象工厂接口,并创建具体的产品族实例。
  • 产品等级结构:每个产品族中的产品都存在一定的等级关系。

2.2 应用场景

        当你需要创建多个相互依赖的产品,或者产品族的创建逻辑较为复杂时,抽象工厂模式就显得尤为重要。例如,在一个图形界面库中,你可能需要根据不同的平台(如Windows、MacOS)创建不同的按钮、窗口和菜单,这时就可以使用抽象工厂模式。

2.3 优点

  • 高度解耦:客户端代码与具体产品类完全解耦。
  • 灵活性:可以轻松替换整个产品族,而不影响客户端代码。

3. 联系与区别

尽管两种模式都用于对象的创建,但它们在设计目的和使用场景上有所不同:

  • 产品结构:工厂方法模式适用于单一产品,抽象工厂模式适用于产品族。
  • 工厂接口:工厂方法模式的工厂接口只有一个方法,而抽象工厂模式的工厂接口包含多个方法。
  • 灵活性:抽象工厂模式提供了更高的灵活性,因为它可以创建一系列相关或相互依赖的产品。

4. 拓展知识

        在实际应用中,我们可能会遇到更复杂的场景,这时可以考虑使用建造者模式(Builder Pattern)来构建复杂的对象。建造者模式允许你通过指定复杂对象的类型和内容逐步构建对象,这在创建具有多个组件和配置的产品时非常有用。

5. 结语

        设计模式是软件工程中的重要工具,它们帮助我们写出更加优雅、可维护和可扩展的代码。工厂方法模式和抽象工厂模式是创建型设计模式中的两个重要成员,它们在不同的场景下发挥着关键作用。理解这些模式的核心概念和应用场景,将有助于我们在面对复杂的对象创建问题时,做出更合理的设计决策。

标签:创建,接口,工厂,抽象,模式,产品,设计模式
From: https://blog.csdn.net/apple_64847327/article/details/143600591

相关文章

  • milvus修改日志记录模式
     1.停掉milvuscd/home/middle/milvusdocker-composestopstandalone这里的standalone是在docker-compose.yml中配置的名称,而不是docker-composeps出来的名称 2.修改配置文件/home/middle/milvus/milvus.yaml该文件已经从docker挂载出来到宿主机#Configuresthesy......
  • 观察者模式:实现对象间的一对多依赖关系
    1.引言在软件开发中,常常需要在一个对象状态发生变化时,自动通知其他依赖于该对象的对象。这种需求在事件驱动的程序中尤其常见。观察者模式(ObserverPattern)正是为了解决这一问题而设计的,它定义了一种一对多的依赖关系,以便当一个对象状态发生变化时,所有依赖于它的对象都会得到......
  • Sigrity Power SI 3D-EM Full Wave HSSO模式如何进行高速差分过孔结构仿真扫描分析以
    SigrityPowerSI3D-EMFullWaveHSSO模式如何进行高速差分过孔结构仿真扫描分析以及反标到Allegro操作指导  高速差分过孔的优化是仿真分析中比较重要的一个环节,SigrityPowerSI的3D-EMFull-WaveHSSO模式就是对高速差分过孔结构进行优化一个工具,可以不同的参数进行......
  • 【seata的AT模式】
    seata的AT模式seata是阿里开源的一个分布式事务解决方案seata三大组件TC:事务协调器,这是一个独立服务,不包含业务代码,负责全局事务统一调度,比如维护全局事务状态、通知RM执行分支事务提交/回滚TM:事务管理器,对应微服务中的聚合服务,负责发起一个全局事务,......
  • 大模型-大模型-架构设计-6种设计模式-09
    目录1.路由分发架构模式2.代理架构模式3.基于缓存的微调架构模式4.面向目标的Agent架构模式5.Agent智能体组合架构模式6.双重安全架构设计模式架构设计模式已成为程序员的重要技能。然而,当我们转向大模型应用领域,情况可能会有所不同。面对新兴技术,比如:生成式AI,我们尚缺......
  • 静态工厂和构造器区别
    publicclassProduct{privateintid;privateStringname;//构造器publicProduct(intid,Stringname){this.id=id;this.name=name;}//静态工厂方法publicstaticProductcreateProduct(intid,Stringnam......
  • 内核调度抢占模式——voluntary和full对比
    一、背景在之前的内核调度子系统专栏里,我们已经把调度有关的如CFS调度/RT调度,调度时间片,调度时延,cfs唤醒抢占特性,这些基本概念和细节都讲了一遍。其实这些细节更多的是帮助我们理解调度系统是如何运作的,调度系统里的大部分参数其实我们都是不会去调整,或者说不敢去做大的调整的......
  • springboot策略设计模式最佳实践
    假设我们希望实现以下需求:支付方式(如支付宝、微信支付)可以动态切换。支付方式配置从配置文件中加载,或者支持在数据库中动态更新。配置文件或数据库中指定当前生效的支付方式。步骤1:配置文件定义支付方式我们可以在application.yml或application.properties中定义支......
  • 高性能的Reactor和Proactor模式学习
    0、引言在上一篇的笔记中,我们学习了操作系统提供的高效I/O管理技术,主要用于解决服务器在高并发场景下的资源浪费和瓶颈问题。但是在实际的代码编写中,要是我们都全部调用底层的I/O多路复用接口来编写网络程序这种面向过程的方式,必然会导致开发的效率不高。于是在这一章节,我们来学......
  • grafana对redis哨兵模式监控添加主库信息
    【环境说明】redis+sentinel哨兵模式+prometheus+grafana监控面板【要求】redis哨兵模式,需要查看主库节点信息,如果发生切换,能查到历史变化信息【配置操作】当前已经安装好三个redis数据库跟哨兵模式,并且都安装好了redis-exporter监控服务prometheus配置监控信息:prometheus.......