简单工厂模式和抽象工厂模式是两种常见的工厂模式。它们都是用于创建对象的模式,但有各自的优点和适用场合。本文将从实现方式、结构、扩展性、使用场景等多个角度来分析简单工厂模式和抽象工厂模式的区别。
简单工厂模式和抽象工厂模式的区别
1. 实现方式
简单工厂模式只有一个工厂,根据传入的参数决定创建哪一种对象。而抽象工厂模式有抽象工厂和具体工厂两个层次。抽象工厂是负责定义产品族的接口,具体工厂实现具体的产品族。抽象工厂模式大概像这样:

2. 结构
简单工厂模式只有一个工厂类和多个产品类,工厂类根据传入的参数返回对应的产品。其结构比较简单,像这样:

而抽象工厂模式则有抽象工厂、具体工厂、抽象产品、具体产品四个部分。一个抽象工厂定义了一组产品,具体工厂则创建一组具体的产品。抽象产品定义产品的接口,具体产品则实现具体的产品。它的结构大约是这个样子:

3. 扩展性
简单工厂模式相对来说比较简单,但是如果要添加新产品,则需要修改工厂类的代码,从而违反了开闭原则。抽象工厂模式则可以通过添加新的具体工厂和具体产品来扩展,不需要修改现有的代码,同时也符合开闭原则。
4. 使用场景
简单工厂模式适用于产品较少,且产品创建逻辑较为简单的场景。比如一个软件只需要创建一个数据库连接,一个日志记录器等等。而抽象工厂模式适用于产品较多,且产品属于多个产品族的情况。比如在一个图形界面系统中,有多个组件需要一起使用,这些组件属于不同的操作系统。抽象工厂就可以用来创建这些组件。
综上所述,简单工厂模式和抽象工厂模式各有优缺点,有相应的使用场景。在使用时应该根据具体情况来选择使用哪一种工厂模式。
不懂自己或他人的心?想要进一步探索自我,建立更加成熟的关系,不妨做下文末的心理测试。平台现有近400个心理测试,定期上新,等你来测。如果内心苦闷,想要找人倾诉,可以选择平台的【心事倾诉】产品,通过写信自由表达心中的情绪,会有专业心理咨询师给予你支持和陪伴。
(1) 产品等级结构:产品等级结构即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机、海信电视机、TCL电视机,则抽象电视机与具体品牌的电视机之间构成了一个产品等级结构,抽象电视机是父类,而具体品牌的电视机是其子类。
(2) 产品族:在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品,如海尔电器工厂生产的海尔电视机、海尔电冰箱,海尔电视机位于电视机产品等级结构中,海尔电冰箱位于电冰箱产品等级结构中,海尔电视机、海尔电冰箱构成了一个产品族。
不同颜色的多个正方形、圆形和椭圆形分别构成了三个不同的产品等级结构,而相同颜色的正方形、圆形和椭圆形构成了一个产品族,每一个形状对象都位于某个产品族,并属于某个产品等级结构。图3中一共有五个产品族,分属于三个不同的产品等级结构。我们只要指明一个产品所处的产品族以及它所属的等级结构,就可以唯一确定这个产品。
当系统所提供的工厂生产的具体产品并不是一个简单的对象,而是多个位于不同产品等级结构、属于不同类型的具体产品时就可以使用抽象工厂模式。抽象工厂模式是所有形式的工厂模式中最为抽象和最具一般性的一种形式。抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式需要面对多个产品等级结构,一个工厂等级结构可以负责多个不同产品等级结构中的产品对象的创建。当一个工厂等级结构可以创建出分属于不同产品等级结构的一个产品族中的所有对象时,抽象工厂模式比工厂方法模式更为简单、更有效率。抽象工厂模式示意图
每一个具体工厂可以生产属于一个产品族的所有产品,例如生产颜色相同的正方形、圆形和椭圆形,所生产的产品又位于不同的产品等级结构中。如果使用工厂方法模式,上图所示结构需要提供15个具体工厂,而使用抽象工厂模式只需要提供5个具体工厂,极大减少了系统中类的个数。
当每个抽象产品都有多于一个的具体子类的时候,工厂角色怎么知道实例化哪一个子类呢?比如每个抽象产品 角色都有两个具体产品。抽象工厂模式提供两个具体工厂角色,分别对应于这两个具体产品角色,每一个具体工厂角色只负责某一个产品角色的实例化。每一个具体工厂类只负责创建抽象产品的某一个具体子类的实例。
每一个模式都是针对一定问题的解决方案,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式针对的是多个产品等级结构。
本站内容仅供参考,不作为诊断及医疗依据,如有医疗需求,请务必前往正规医院就诊
祝由网所有文章及资料均为作者提供或网友推荐收集整理而来,仅供爱好者学习和研究使用,版权归原作者所有。
如本站内容有侵犯您的合法权益,请和我们取得联系,我们将立即改正或删除。
Copyright © 2022-2023 祝由师网 版权所有