设计模式(七)——工厂模式总结

SAP CO-PA数据传送避坑指南:销售开票与FI/MM记账的日常配置实操(含KEKF/KE4I/KEI2) 本文深入解析SAP CO-PA数据传送中的常见配置问题,特别是销售开票与FI/MM记账环节的实操避坑指南。通过KEKF/KE4I/KEI2等关键配置点的详细说明,帮助用户避免数据失真和重复记录,提升获利能力分析的准确性。文章结合实战案例,揭示官方文档未提及的'数据黑洞'形成机制,为SAP顾问提供实用的排雷手册。 阅读详情

本文转载 自http://www.hollischuang.com/archives/1430

分类

工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。

工厂模式可以分为三类:

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

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

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

这三种模式从上到下逐步抽象,并且更具一般性。

GOF在《设计模式》一书中将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory)。

将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例,两者归为一类。

创建型模式

前面介绍过的三种工厂模式在设计模式的分类中都属于创建型模式。

创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰,外界对于这些对象只需要知道它们共同的接口,而不清楚其具体的实现细节,使整个系统的设计更加符合单一职责原则。

创建型模式在创建什么(What),由谁创建(Who),何时创建(When)等方面都为软件设计者提供了尽可能大的灵活性。创建型模式隐藏了类的实例的创建细节,通过隐藏对象如何被创建和组合在一起达到使整个系统独立的目的。

工厂模式的优点

工厂模式是创建型模式中比较重要的。

工厂模式的主要功能就是帮助我们实例化对象的。之所以名字中包含工厂模式四个字,是因为对象的实例化过程是通过工厂实现的,是用工厂代替new操作的。

这样做的好处是封装了对象的实例化细节,尤其是对于实例化较复杂或者对象的生命周期应该集中管理的情况。会给你系统带来更大的可扩展性和尽量少的修改量。

三种工厂模式之间的演化与区别

factory

简单工厂 : 用来生产同一等级结构中的任意产品。(对于增加新的产品,主要是新增产品,就要修改工厂类。符合单一职责原则。不符合开放-封闭原则)

工厂方法 :用来生产同一等级结构中的固定产品。(支持增加任意产品,新增产品时不需要更改已有的工厂,需要增加该产品对应的工厂。符合单一职责原则、符合开放-封闭原则。但是引入了复杂性)

抽象工厂 :用来生产不同产品族的全部产品。(增加新产品时,需要修改工厂,增加产品族时,需要增加工厂。符合单一职责原则,部分符合开放-封闭原则,降低了复杂性)

面向对象设计的基本原则:

1)       OCP(开闭原则, Open-Closed Principle):一个软件的实体应当对扩展开放,对修改关闭。

2)       DIP(依赖倒转原则,Dependence Inversion Principle):要针对接口编程,不要针对实现编程。

3)       LoD(迪米特法则, Law of Demeter):只与你直接的朋友通信,而避免和陌生人通信。

一、简单工厂模式(静态工厂模式)

要点:
1)简单工厂模式也叫静态工厂模式,就是工厂类一般使用静态方法,通过接收的参数的不同的对象的不同来返回不同的对象实例。
2)对于增加新产品无能为力!不修改代码的话,是无法扩展的。
3)一般使用较多还是简单工厂模式。

二、工厂方法模式

工厂方法模式要点:

1)为了避免简单工厂模式的缺点,不完全满足OCP(开闭原则)。

2)工厂方法模式和简单工厂模式最大的不同在于,简单工厂模式只有一个(对于一个项目或者一个独立模块而言)工厂类,而工厂方法模式有一组实现了相同接口的工厂类。

Car.java接口的源码:

 

工厂方法模式更加符合开闭原则。弊端是每次扩展都会增加新的类。

三、简单工厂模式和工厂方法模式PK

1)结构复杂度

  从这个角度比较,显然简单工厂模式要占优,简单工厂模式只需要一个工厂类,而工厂方法模式的工厂类随着产品类的个数增加而增加,这无疑会使类的个数越来越多,从而增加了结构的复杂程度。

2)代码复杂度

   代码复杂度和结构复杂度是一对矛盾,既然简单工厂模式在结构方面相对简洁,那么它在代码方面肯定是比工厂方法模式复杂的了。简单工厂模式的工厂类随着产品类的增加需要增加更多方法(或代码)。

3)客户端编程难度

   工厂方法模式虽然在工厂类结构中引入了接口从而满足了OCP,但是在客户端编码中需要对工厂类进行实例化。而简单工厂模式的工厂类是个静态类,在客户端无需实例化,这无疑是个吸引人的优点。

4)管理上的难度

   这是个关键的问题。

   我们先谈扩展。众所周知,工厂方法模式完全满足OCP,即它有非常良好的扩展性。那是否就说明了简单工厂模式就没有扩展性呢?答案是否定的,简单工厂模式同样具备良好的扩展性-----扩展的时候仅需要修改少量的代码(修改工厂类的代码)就可以满足扩展性的要求了。尽管这没有完全满足OCP,但我们不需要太拘泥于设计理论,要知道,sun提供的java官方工具包中也有很多没有满足OCP的例子啊。

   然后我们从维护性的角度分析下,假如某个具体产品类需要进行一定的修改,很可能需要修改对应的工厂类。当同时需要修改多个产品类的时候,对工厂类的修改会变得相当麻烦(对号入座已经是个问题了)。反而简单工厂没有这些问题,当多个产品类需要修改时,简单工厂模式仍然仅仅需要修改唯一的工厂类(无论怎样都能改到满足要求吧?大不了把这个类重写)。

根据设计理论建议:工厂方法模式。但实际上,我们一般都用了简单工厂模式。

四、抽象工厂模式

抽象工厂模式:

1)用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)。

2)抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。

上图发动机、座椅、轮胎是一个产品族,而这些产品又分为高档、中档、低档,在两个维度变化。

工厂模式要点:

1)简单工厂模式(静态工厂模式)

   虽然某种程度不符合设计原则,但实际使用最多。

2)工厂方法模式

   不修改已有类的前提下,通过增加新的工厂类实现扩展。

3)抽象工厂模式

   不可以增加产品,可以增加产品族。

应用场景:

1)JDK中Calendar的getInstance方法;

2)JDBC中Connection对象的获取;

3)Hibernate中SessionFactory创建Session;

4)Spring中IOC容器创建管理bean对象;

5)XML解析时的DocumentBuilderFactory创建解析器对象;

6)反射中Class对象的newInstance()。

Upload Symbols Failed:The archive did not include a dSYM for the LiveKitWebRTC.framework with the UU 你需要从源码构建 LiveKitWebRTC,而不是使用 CocoaPods 安装的预编译 .xcframework。Step 2: 修改 Podfile 使用本地路径引用(不是从源下载的 xcframework)方法 :强制从源码构建 LiveKitWebRTC.framework(推荐)这样它就会编译 WebRTC 并带上正确 UUID 的 dSYM。替换路径为你 clone 下来的 LiveKit 源码位置。Step 1: 克隆源码仓库。 阅读详情

相关推荐

从URDF到Gazebo:一个完整的ROS2机械臂仿真项目实战与避坑指南

本文提供了一个完整的ROS2机械臂仿真项目实战指南,详细讲解了从URDF建模、ROS2 Control配置、MoveIt2集成到Gazebo仿真的全流程。文章重点分享了URDF惯性参数设置、Gazebo插件选择、MoveIt2配置修正等关键步骤的避坑经验,帮助开发者快速搭建可用的六轴机械臂仿真环境,实现从静态模型到物理仿真的跨越。

weixin_29279153的博客 273

工厂模式+策略模式的使用

项目中会有这样的情形,通过某个参数进入不同的if分支,但是if分支太多就会导致项目难以维护,可读性也会降低,如下情形: public class Test { public static void main(String[] args) { String ani = "pig"; if(ani.equals("cat")){ sh...

Hello dream的博客 1249

STM32F4串口接收ATGM336H GPS数据,手把手教你解析NMEA协议并转换经纬度格式

本文详细介绍了如何使用STM32F4开发板通过串口接收ATGM336H GPS模块的NMEA协议数据,并解析GNRMC语句获取经纬度信息。内容涵盖硬件连接、NMEA协议深度解析、数据校验实现以及经纬度格式转换的数学原理与代码实现,为嵌入式开发者提供完整的GPS数据处理解决方案。

weixin_42522575的博客 497

Java设计模式(七大原则和简单工厂模式)

在软件开发中使用面向对象设计原则可以提高软件的可维护性和可复用性,以便设计出兼具良好的可维护性和可复用性的软件系统,实现可维护性复用的目标。

qq_45947672的博客 300

用Arduino和FS-i6X遥控器,从零开始打造你的第一只仿生扑翼蝴蝶(附完整代码解析)

本文详细介绍了如何利用Arduino和FS-i6X遥控器从零开始制作仿生扑翼蝴蝶,包括硬件准备、电路连接、代码解析和调试技巧。通过完整的代码示例和参数说明,帮助读者快速掌握仿生机器人的制作要点,实现蝴蝶的自然飞行效果。

weixin_28727975的博客 309

学Simulink--机器人基础关节控制场景实例:基于Simulink的无刷直流电机(BLDC)关节六步换相位置控制仿真

本文详细介绍了基于Simulink的BLDC六步换相位置控制仿真方法,针对机器人关节的低成本控制需求。重点阐述了霍尔定位、六步换相和位置闭环三大核心原理,通过Simulink建模实现了从霍尔信号处理到位置环控制的全流程。仿真结果表明,该系统可实现0.3°的定位精度和80ms的响应时间,满足教育机器人等应用场景需求。文章还提供了核心代码模块和参数设置方法,并探讨了转矩脉动抑制、无传感器控制等进阶优化方向,为低成本机器人关节驱动提供了实用解决方案。

amy_mhd的博客 152

java 不同参数构造的区别_java – 对不同参数的类使用工厂模式

我有一个非常简单的工厂,它将枚举作为其参数之一来确定应该创建的对象的类型,以及所有正在创建的对象通用的另一个参数.当我为工厂添加更多的类型来创建我的对象构造函数的参数开始不同,例如:public class someFactory {public someFactory() {}public SomeObject newObject(Type type,Object data) {return t...

weixin_28938701的博客 343

基于知识图谱的智能工作流引擎

随着大数据和人工智能技术的快速发展,企业和组织对数据的依赖程度日益增加。为了更好地管理和利用这些数据,知识图谱逐渐成为一种重要的工具。知识图谱不仅能够以结构化的方式表示复杂的知识,而且能够通过推理和查询提供深层次的信息。然而,如何将知识图谱应用于实际业务场景中,尤其是如何构建智能工作流引擎,仍然是一个具有挑战性的问题。智能工作流引擎是一种能够自动化执行复杂业务流程的系统,它可以通过对业务规则和数据的分析,自动生成和优化工作流,从而提高工作效率和准确性。

AI天才研究院 1870

工厂模式(工厂方法模式,抽象工厂模式) Java

工厂模式分为3类: * 简单工厂模式 Simple Factory * 工厂方法模式 Factory Method * 抽象工厂模式 Abstract Factory thinking in Java 中工厂方法模式的例子:interface Service{ void method1(); void method2(); }interface ServiceFactory{

power0405hf的专栏 5241

【Unity 实用工具篇】✨| 使用Fungus插件制作一个对话系统,简单好学易上手

今天带来的是Unity中一款简单易用的对话插件Fungus,它是一个免费的交互式的对话系统。 Fungus是Unity免费的一款开源的插件,它可以无代码的实现玩家与NPC之间的对话,并且支持本地化,对相机、Sprite及音乐音效的控制。 学会使用该插件就可以做一些对话剧情类的游戏了,还是非常好用的,下面就来学习一下Fungus具体怎么使用吧!

努力前行,总会成为自己心中的那道光 1万+

22、忆阻器、忆阻系统及其神经形态应用综述

本文综述了忆阻器与忆阻系统的理论基础及其在神经形态系统中的广泛应用。从忆阻器的基本定义出发,介绍了其在非线性电路、存储技术、通信和神经形态计算等领域的应用潜力。重点探讨了基于忆阻器的神经元模型(如Hodgkin-Huxley、FitzHugh-Nagumo和Hindmarsh-Rose模型)、突触实现方式及多种忆阻神经网络架构,包括细胞神经网络、脉冲神经网络和递归神经网络等。此外,深入分析了忆阻器在水库计算中的理论研究与硬件实现进展,展示了其在时间序列处理、模式识别和信号预测等方面的优异性能。尽管忆阻技术前

kiwi8的博客 207

简单工厂 -- 不同参数返回不同的类实例

工厂模式是最常用的一类创建型设计模式,通常我们所说的工厂模式是指工厂方法模式,它也是使用频率最高的工厂模式。本章将要学习的简单工厂模式是工厂方法模式的“小弟”,它不属于GoF 23种设计模式,但在软件开发中应用也较为频繁,通常将它作为学习其他工厂模式的入门。此外,工厂方法模式还有一位“大哥”——抽象工厂模式。这三种工厂模式各具特色,难度也逐个加大,在软件开发中它们都得到了广泛的应用,成为面向对

智多牛 - 俯首甘为孺子牛! 5697

虚幻商城 蓝图汇总

虚幻引擎是一个非常强大和灵活的游戏开发工具,拥有众多的蓝图可以帮助我们更高效地工作。

一碗清深的博客 1506

设计模式学习(七):Factory Method工厂模式

在Template Method模式中,我们在父类中规定处理的流程,在子类中实现具体的处理。如果我们将该模式用于生成实例,它就演变为本章中我们所要学习的Factory Method模式。设计模式学习(六):Template Method模板方法模式_玉面大蛟龙的博客Factory有“工厂”的意思。用Template Method模式来构建生成实例的工厂,这就是Factory Method模式。

m0_49499183的博客 1341

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

七、工厂方法设计模式

工厂方法设计模式 一、工厂方法特点 1.工厂方法-定义类型: ①.定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类工厂方法让类的实例化推迟到子类中进行 ②.类型是创建类型 2.工厂方法-适用场景 ①.创建对象需要大量重复的代码 ②.客户端(应用层)不依赖与产品类实例如何被创建、实现等细节 ③.一个类通过其子类来指定创建哪个对象 3.工厂方法-优点 ①.用户只需要关心所需要产品对应的工...

风子的博客 290

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

C#23种设计模式(七)抽象工厂

是一种创建型设计模式,它提供了一种方式,可以创建一系列相关或相互依赖的对象,而无需指定它们的具体类。抽象工厂模式强调的是的概念,即每个工厂创建的对象属于一个系列。: 在Open方法中,分别创建了南昌工厂和上海工厂的实例,并使用它们创建对应的鸭脖和鸭架对象,然后调用Print方法打印信息。定义了创建鸭脖和鸭架的抽象方法。和分别实现了抽象工厂类,提供了创建南昌和上海鸭脖及鸭架的具体实现。YaBo和YaJia分别是鸭脖和鸭架的抽象类,定义了Print抽象方法。和分别实现了对应的抽象产品类,提供了具体的Print。

m0_57417006的博客 870

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Spring中用到的九种设计模式七:工厂方法

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录系列文章目录前言一、工厂方法二、角色组成三、示例代码四、优缺点1. 优点2. 缺点3. 适用场景五、模式在Spring源码中的体现参考文档 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机

猿起于此 506

23种设计模式(七)对象创建之工厂方法

文章目录动机设计方法一设计方法二模式定义要点总结   通过“对象创建” 模式绕开new,来避免对象创建(new)过程 中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定。它 是接口抽象之后的第一步工作。 动机   在软件系统中,经常面临着创建对象的工作;由于需求的变化,需要创建的对象的具体类型经常变化。 设计方法一 FileSplitter1.cpp class ISplitter{ public: virtual void split()=0; virtual ~ISplitter

小小何先生的学习之旅 356

设计模式(七)抽象工厂模式

抽象工厂模式: kit模式,提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们具体的类。 和工厂方法模式不同的是,抽象工厂模式的工厂方法创建的是一个产品族,每一个产品都位于某个产品等级结构中。 同样,4个角色: (1)AbstractFactory抽象工厂:声明了一组用于创建一族产品的方法,每个方法对应一种产品。 (2)ConcreteFactory具体工厂:实现了在抽

ForestRound的博客 700

JAVA设计模式大总结系列博客(七)极具生产力的工厂模式

目录定义工厂模式分类简单工厂模式工厂方法模式总结 定义 工厂模式我找了下,网上没有现成的完整定义,都是根据具体的案例来说明的。具体的讲就是,由于在JAVA中,存在着继承和多态这两个重要的概念,所以会出现这么一种情况就是:如果“水果”是一个事物的话,它的多态体现出来就是,苹果是水果,菠萝是水果,香蕉也是水果…这些同时也存在一种继承关系,水果是“父”,苹果,菠萝等是“子”,反映在JAVA代码中就是,我所有的水果都实现了“水果”这个接口,那么如果我想把他们管理起来,这些对象在创建的过程中都是需要实例化的,这些水果

爱吃早餐的程序员 323

设计模式系列(七)简单工厂模式、工厂方法模式和抽象工厂模式对比

设计模式系列(七)简单工厂模式、工厂方法模式和抽象工厂模式对比     在前面的三篇文章中,依次讲解了简单工厂模式、工厂方法模式和抽象工厂模式,这篇文章主要对其进行简单的对比和概括,详细部分大家可以参考前三篇文章。     简单工厂模式:点击打开链接     工厂方法模式:点击打开链接     抽象工厂模式:点击打开链接     下面我们来总体看一下这三个模式的例

君临天下的博客 920

设计模式详解(七)抽象工厂模式

版权声明:本文为博主原创文章,欢迎大家转载! 但是转载请标明出处: https://blog.youkuaiyun.com/t000818/article/details/84310559 ,本文出自:【唐宏宇的博客】 1.1. 模式动机 在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法...

一场人生,一场梦 537

设计模式学习七:工厂方法模式

工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类实例化延迟到子类。

weixin_33872660的博客 85

OOP七大原则以及设计模式

1、开闭原则解释:对扩展开放,对修改关闭。2、里氏替换原则解释:子类继承父类,子类可以扩展父类的功能,但不要改变父类已有方法的功能。3、依赖倒置原则解释:高层的模块不应依赖低层的模块。抽象不依赖细节,细节应依赖抽象。面向接口编程,降低程序耦合性。例如定义接口或抽象类,在接口的实现类或抽象类的子类里具体实现功能。4、单一职责原则解释:一个方法完成一个功能。5、接口隔离原则解释:6、迪米特原则解释:A-B-C A不要和C去发生关联,而是通过B。7、合成复用原则。

2301_76947341的博客 294

设计模式----工厂模式

1.设计模式简介 GoF23(23种设计模式)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路,它不是语法规定,而是用来提高代码的可复用性,可维护性,可读性稳健性以及安全性的解决方案。设计模式的本质是面向对象设计原则的实际运用。是对类的封装,继承,多态以及类的关联关系和组合关系的充分理解。可以提高程序员的思维能力,编程能力里和设计能力,使程序设计更加标准化,代码编制更加工程化,提升效率,缩短开发周期。使开发的产品安全性更高,可维护性更强,可用性更高,重点是理解思想与应用场景。 2....

weixin_41549354的博客 211

iOS -- 工厂设计模式

专门定义一个类(工厂类)来负责创建其他类的实例。可以根据创建方法的参数来返回不同类的实例,被创建的实例通常具有共同的父类。抽象工厂模式里每个工厂都会生产多种产品,但不同工厂生产的产品属于不同的系列。简单工厂模式将对象的创建和使用分离,使得客户端代码更加灵活,并且可以降低代码的耦合度。**聚合:**表示一个类与其他类之间存在关联关系,其中一个类是另一个类的容器或集合,但这些类之间的关系并不是强依赖的关系。当系统中加入新产品时,除了需要提供新的产品类之外,还要提供与其对应的具体工厂类。

qq_72437394的博客 1565
上一篇: 设计模式(六)——抽象工厂模式
下一篇: 设计模式(八)——建造者模式
farmering
博客等级 码龄15年 18粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值