设计模式:简单工厂、工厂方法、抽象工厂之小结与区别

设计模式】——抽象工厂模式(Abstract Factory Pattern) 抽象工厂模式是所有形态的工厂模式中最抽象和最具一般性的一种。它适用于处理具有产品族(即一组相互关联或相互依赖的产品)的产品结构。产品族是指位于不同等级结构中的一组产品,它们之间可能存在一定的依赖或约束关系。抽象工厂模式通过定义一个接口,使得客户端可以在不必指定具体产品的情况下,创建多个产品族中的产品对象。 阅读详情

简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式。其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性。

本文是本人对这三种模式学习后的一个小结以及对他们之间的区别的理解。

 

简单工厂

简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。

不修改代码的话,是无法扩展的。

简单工厂

 

 

工厂方法

工厂方法是针对每一种产品提供一个工厂类。通过不同的工厂实例来创建不同的产品实例。

在同一等级结构中,支持增加任意产品。

工厂方法

 

 

抽象工厂

抽象工厂是应对产品族概念的。比如说,每个汽车公司可能要同时生产轿车,货车,客车,那么每一个工厂都要有创建轿车,货车和客车的方法。

应对产品族概念而生,增加新的产品线很容易,但是无法增加新的产品。

抽象工厂

 

 

 

小结

★工厂模式中,重要的是工厂类,而不是产品类。产品类可以是多种形式,多层继承或者是单个类都是可以的。但要明确的,工厂模式的接口只会返回一种类型的实例,这是在设计产品类的时候需要注意的,最好是有父类或者共同实现的接口。

★使用工厂模式,返回的实例一定是工厂创建的,而不是从其他对象中获取的。

★工厂模式返回的实例可以不是新创建的,返回由工厂创建好的实例也是可以的。

 

区别

简单工厂 用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力)

工厂方法 :用来生产同一等级结构中的固定产品。(支持增加任意产品)  
抽象工厂 :用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)  

 

以上三种工厂 方法在等级结构和产品族这两个方向上的支持程度不同。所以要根据情况考虑应该使用哪种方法。  

 

 

【重温设计模式抽象工厂及其Java示例 我们详细地探讨了抽象工厂模式,从它的概念、特点、结构和组成,到Java实现,再到优缺点和实际应用,我尽可能地将抽象工厂模式的各个角度做了全面的阐述。我们知道,抽象工厂模式是一种非常实用的设计模式,它可以帮助我们更好地抽象和封装代码,提高代码的可维护性和可扩展性。然而,设计模式并非银弹,我们需要根据实际的项目需求和场景来选择合适的设计模式抽象工厂模式虽好,但并不适合所有的场景。当我们的系统的产品有多于一个的产品族,而系统只消费其中某一族的产品时,抽象工厂模式是一个不错的选择。 阅读详情

相关推荐

【SpringBoot 3.x 第57节】Spring Boot 3 启动快得不讲武德?揭秘 Spring AOT 编译引擎背后的真相!

🏆本文收录于《滚雪球学SpringBoot 3》,专门攻坚指数提升,本年度国内最系统+最专业+最详细(永久更新)。    本专栏致力打造最硬核 SpringBoot3 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。 如果想快速定位学习,可以看这篇【SpringBoot3教程导航帖】,你想学习的都被收集在内,快速投入学习!!两不误。    若还想学习更多,可直接前往《滚雪球学SpringBoot(全版本合集)》,涵盖SpringBoot所有版本教学文章

**My Coding Family** 1707

设计模式创建型——抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)隶属于设计模式中的创建型模式,用于产品族的构建。抽象工厂是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂是指当有多个抽象角色时使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象。

tszc95的博客 9832

Python 爬虫实战:从零搭建第一个爬虫程序(附完整代码)

本文介绍了Python网络爬虫的入门实战,以豆瓣Top250电影榜单为例,详细讲解爬虫开发全流程。内容包括爬虫基础原理、环境搭建、请求发送响应处理、数据解析保存等核心环节,并提供了可直接运行的完整代码示例。文章还分析了常见问题解决方案,并强调了爬虫开发的合规注意事项。通过本教程,读者可快速掌握Python爬虫的基本思路和实操技巧,为后续深入学习BeautifulSoup、XPath等进阶技术打下基础。

2503_91057718的博客 2292

抽象工厂设计模式

抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种方式,可以将一组具有相同主题的单独工厂封装起来。在这种模式中,客户端不需要知道它从这些内部工厂中获取的具体对象是属于哪个类别。客户端只需要知道如何这些工厂进行交互,而不需要关心如何创建具体的产品对象。

静坐听雨 266

设计模式抽象工厂模式

抽象工厂模式定义:围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 主要意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 主要解决:接口选择的问题。 解决方案:在一个产品族里面,定义多个产品。 优点: 当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中...

自己的选择,无论是否正确,请坚持下去,黎明就在下一刻。 2000

c# 设计模式 之:简单工厂工厂方法抽象工厂小结区别

很多时候,我发现这三种设计模式难以区分,常常会张冠李戴闹了笑话。很有必要深入总结一下三种设计模式的特点、相同之处和不同之处。 1 本质   三个设计模式名字中都含有“工厂”二字,其含义是使用工厂(一个或一系列方法)去生产产品(一个或一系列类的实例)。   另外,有时候,我们常常会将生产产品的一个或一系列方法封装到一个类中,我习惯把这个类叫做“工厂类”;而被实例化的类称作“产...

weixin_30487317的博客 147

设计模式简单工厂工厂方法抽象工厂小结区别 (转)

简单工厂工厂方法抽象工厂都属于设计模式中的创建型模式。其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性。 本文是本人对这三种模式学习后的一个小结以及对他们之间的区别的理解。 简单工厂 简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。 不修改代码的话,是无法扩展的。 工厂方法 工厂方法是...

weixin_33705053的博客 200

JAVA设计模式简单工厂工厂方法抽象工厂小结区别

简单工厂工厂方法抽象工厂都属于设计模式中的创建型模式。其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性。本文是本人对这三种模式学习后的一个小结以及对他们之间的区别的理解。简单工厂简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。不修改代码的话,是无法扩展的。工厂方法工厂方法是针对每一种产品提供一个工厂类。通过不同的工厂实例来创建不同的产品实例。在同一等级结构中,支持增加任意产品抽象工厂抽象工厂是应对产品族概念的。比如说,每个汽

igoogling的专栏 1928

java设计模式---3种工厂模式核心原理、区别总结

一、简单工厂模式:    1.原理:        普通类作为工厂类。    2.特点:        1.1 对用户而言------很不方便------用户需要指定所需产品的种类。        1.2 耦合度高------公共的逻辑和私有的逻辑都耦合在一个工厂类中实现。        1.3 可扩展性差------增加种类时,需要更改公用的工厂类中的逻辑。        1.4 冗余代码少--...

Shadowed_Heart 1028

创建型设计模式(4)—— 抽象工厂模式(Abstract Factory Pattern)

使用设计模式可以提高代码的可复用性、可扩充性和可维护性。抽象工厂模式(Abstract Factory Pattern)属于创建型模式,为创建一组相关或者相互依赖的对象(产品族)提供一个抽象类接口,而无需指定它们的具体类。。产品族的定义是:某个具体工厂生产的所有类型的产品,比如定义了一个抽象工厂接口A,它可以生产三种产品:p1、p2、p3,而这三个产品就叫一个产品族。抽象工厂模式可以说是工厂方法模式的升级版,当需要创建的产品有多个产品族时使用抽象工厂模式是比较好的选择。那什么是多个产品族呢?拿我们在。

Doublelv 的博客专栏。 1834

设计模式】第4章·工厂方法模式

工厂方法模式中不再提供一个统一的工厂类来创建所有的产品对象,而是针对不同的产品提供不同的工厂,系统提供一个产品等级结构对应的工厂等级结构。

weixin_44143114的博客 1615

设计模式——工厂方法模式

工厂方法是一种创建设计模式,它在父类中提供了创建对象的接口,但允许子类更改将要创建的对象类型。

y小川的专栏 8845

设计模式——抽象工厂模式

抽象工厂入门

qq_56412380的博客 1795

工厂方法抽象工厂区别

工厂方法抽象工厂方法: 图示: 区别: 联系:

4513

51单片机Proteus仿真实例 单片机之间双向通信

51单片机Proteus仿真实例 单片机之间双向通信51单片机Proteus仿真实例 单片机之间双向通信51单片机Proteus仿真实例 单片机之间双向通信51单片机Proteus仿真实例 单片机之间双向通信51单片机Proteus仿真实例 单片机之间双向通信51单片机Proteus仿真实例 单片机之间双向通信51单片机Proteus仿真实例 单片机之间双向通信51单片机Proteus仿真实例 单片机之间双向通信51单片机Proteus仿真实例 单片机之间双向通信51单片机Proteus仿真实例 单片机之间双向通信51单片机Proteus仿真实例 单片机之间双向通信51单片机Proteus仿真实例 单片机之间双向通信51单片机Proteus仿真实例 单片机之间双向通信51单片机Proteus仿真实例 单片机之间双向通信51单片机Proteus仿真实例 单片机之间双向通信51单片机Proteus仿真实例 单片机之间双向通信51单片机Proteus仿真实例 单片机之间双向通信51单片机Proteus仿真实例 单片机之间双向通信51单片机Proteus仿真实例 单片机之间双向通信51单片机P

上一篇: 深入理解JavaScript的变量作用域
下一篇: Struts1:options和optionsCollection的使用及区别
superbeck
博客等级 码龄21年 63粉丝 72原创
评论 41
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值