首页 > 其他分享 >工厂模式 -- 设计模式

工厂模式 -- 设计模式

时间:2024-09-19 16:21:46浏览次数:3  
标签:-- Pattern Factory 模式 工厂 接口 创建对象 设计模式

工厂模式(Factory Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。这样,我们就将对象的创建与使用分离,从而提高了系统的灵活性和可扩展性。

工厂模式的类型

工厂模式主要分为三种类型:简单工厂模式(Simple Factory Pattern)、工厂方法模式(Factory Method Pattern)和抽象工厂模式(Abstract Factory Pattern)。

1. 简单工厂模式(Simple Factory Pattern)

简单工厂模式不属于GoF的23种设计模式之一,但它非常常见且易于理解。它定义了一个创建对象的类,但该类使用一个静态方法来提供对外创建对象的接口,所有被创建的对象都有共同的父类或接口。

优点

  • 客户端不需要知道所创建的具体类名。
  • 简单工厂模式通过对象工厂类来负责创建对象,减少了客户端的直接依赖。

缺点

  • 违反了开闭原则,即软件实体(类、模块、函数等)应对扩展开放,对修改关闭。每次增加新产品时,都需要修改工厂类。

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

工厂方法模式定义了一个用于创建对象的接口,但让子类决定要实例化的类是哪一个。工厂方法让类的实例化推迟到子类中进行。

优点

  • 用户只需要知道具体工厂的名称就可得到所要的产品,无须知道这个产品是如何被具体创建的。
  • 符合开闭原则,新增一种产品时,只需要增加相应的具体产品类和对应的具体工厂类,无须对原工厂接口和抽象工厂类做任何修改。

缺点

  • 类中如果抽象产品类过多,那么工厂接口中必要的方法就很多,不利于接口的维护。

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

抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。客户端(调用者)不依赖于产品类实例如何被创建、组合和表达的细节。

优点

  • 可以在类的内部对产品类进行约束,即对提供一系列产品接口时必须一起使用,而不能与其它产品接口一起使用,这保证了产品的正确使用。
  • 增加了新的产品族时,只需要增加新的具体工厂类,不需要修改抽象工厂类接口和已存在的具体工厂类,这样就满足了开闭原则。

缺点

  • 产品族的扩展将带来系统抽象的复杂化,产品的族类越多,抽象工厂的接口及其实现类就越复杂,这样就增加了系统的具体类的数量,也增加了系统的复杂度和理解难度。

总结

工厂模式的主要目的是将对象的创建与使用分离,以提高系统的灵活性和可扩展性。选择哪种工厂模式取决于具体的应用场景和需求。

标签:--,Pattern,Factory,模式,工厂,接口,创建对象,设计模式
From: https://blog.51cto.com/u_16406687/12057666

相关文章

  • GL-03CGJ -48W LED平板灯
    适用范围生物制药、医疗卫生、食品保健、电子IT业、实验室等。性能特点灯框采用铝合金边框、喷塑成型。灯体厚度10MM,,灯体表面静电喷涂处理,使用30000小时不变色、不褪色;边框采用优质铝框,喷白色,配合紧凑,与各种天花完美结合。反射面采用光学原理设计,反射率高,合理利用有效光,光......
  • Go语言grequests库并发请求的实战案例
    在当今快速发展的互联网时代,数据的获取和处理速度成为了衡量一个系统性能的重要标准。Go语言以其并发处理能力而闻名,而grequests库则为Go语言的HTTP请求提供了简洁易用的API。本文将通过一个实战案例,介绍如何使用Go语言的grequests库来实现高效的并发HTTP请求。1.引言在......
  • 网络工程师学习笔记——网络互连与互联网(二)
    IP地址是电脑在互联网上进行进行通信的“身份证”是网络号+主机号网络号代表所处的网段,而主机号则代表电脑ipv4有232个ip地址大约43亿其中又分为A、B、C、D、E类地址A:1.0.0.0~127.255.255.255(首位0)B:128.0.0.0~191.255.255.255(10)C:192.0.0.0~223.255.255.255(110)D:224.0.0......
  • 提升IT效率:Oracle数据库一键安装,让运维变得简单又快速!
    此脚本针对11.2.0,其他版本oracle类似。脚本执行的所有步骤定义Oracle安装所需的变量。打印本机主机名、内存大小、OracleSID以及为内核shmmax和shmall设置的值。提示用户将Oracle数据库安装包放置在特定目录。创建swap空间。安装EPEL仓库和NTP服务,同步时间。关......
  • 从零开始搭建自己的个人博客——前端篇之前端“三剑客”(html、css和js)的介绍
    第一章前言    我们总听大佬们常说编程有前端和后端之分,但是关于前端和后端我们总是一知半解,而我们想要搭建自己的个人博客,那么必然避免不了对前端网页的接触。本篇文章就是对前端进行介绍,你可以了解到什么是前端“三剑客”,它们都有什么作用。    不过,关于......
  • centos7 EOL大限已到,你会不会还不知道如何优化吧?
    背景Linux参数优化是指调整Linux操作系统的内核参数以提高系统性能、稳定性和资源利用率的过程。这些参数控制着操作系统的各个方面,包括内存管理、文件系统、网络和进程调度等好处提高性能:通过调整参数,可以减少延迟,提高吞吐量,使得系统能够更快地响应用户和应用程序的请求。......
  • (6-2-02)模型训练:文生图大模型的训练策略(2)对比学习+数据增强+迁移学习
    6.2.4 对比学习对比学习(ContrastiveLearning)通过构造正负样本对,让模型学习到不同模态之间的相似性和差异性。例如,在“图像-文本”匹配任务中,可以使用对比学习方法让模型区分匹配和不匹配的“图像-文本”对。请看下面的例子,演示了使用对比学习方法训练模型来学习“图像-文......
  • mysql事务隔离级别和spring事务传播机制
    一、事务并发会出现的三个问题数据库事务具有ACID4个特性:A:Atomic,原子性,将所有SQL作为原子工作单元执行,要么全部执行,要么全部不执行;C:Consistent,一致性,事务完成后,所有数据的状态都是一致的,即A账户只要减去了100,B账户则必定加上了100;I:Isolation,隔离性,如果有多个事务并发执行,每个......
  • Windows sver 2012
    DHCP安装DHCP......
  • 易优cms修改后台路径名,出现404错误
    当你修改了易优CMS(EyouCMS)的后台路径后出现404错误时,这通常是由于Web服务器的配置未能正确识别新的路径所致。下面是一些可能的解决方案,包括更改文件所有者和组,以及检查Web服务器的配置文件。解决方案1.更改文件所有者和组如果你的Web服务器是以特定的用户和组身份运行的,那么......