Abstract Factory(抽象工厂)--对象创建模式

Abstract Factory (抽象工厂)–对象创建模式

一、意图
提供一个创建一系列相关或者相互依赖的接口,而无需指定它们具体的类。

二、动机
1.在软件系统中,经常面临着“一系列相互依赖的对象”的创建工 作;同时,由于需求的变化,往往存在更多系列对象的创建工作。
2.如何应对这种变化?如何绕过常规的对象创建方法(new),提供一 种“封装机制”来避免客户程序和这种“多系列具体对象创建工作” 的紧耦合?

三、适用性
1.一个系统要独立于它的产品的创建、组合和表示时。
2.一个系统要由多个产品系列中的一个来配置时。
3.当你要强调一系列相关产品对象的设计以便进行联合使用时。
4.当你提供一个产品类库、而只想显示它们的接口而不是实现时。

四、结构在这里插入图片描述

五、效果
1.它分离了具体的类。
2.它使得易于交换产品系列。
3.它有利于产品的一致性。
4.难以支持新种类的产品。

六、实现
1.将工厂作为单件。
2.创建产品。
3.定义可扩展的工厂。

七、要点总结
1.如果没有应对“多系列对象构建”的需求变化,则没有必要使用 Abstract Factory模式,这时候使用简单的工厂完全可以。
2.“系列对象”指的是在某一特定系列下的对象之间有相互依赖、 或作用的关系。不同系列的对象之间不能相互依赖。
3.Abstract Factory模式主要在于应对“新系列”的需求变动。其缺点在于难以应对“新对象”的需求变动。
4.所有餐品都将返回类型所给的相同的抽象接口返回给客户。客户将不能区分或对一个产品的类型进行安全的假定。如果一个客户需要进行与特定的子类相关的操作,而这些操作却不能通过抽象的接口得到。虽然可以实现一个向下类型转型,但这并总是可行或安全的。

八、举例说明
家具工厂,要建椅子、凳子、桌子等,有些客户可能要木质的,有些客户可能要竹制的,还有些药塑料制的等,比较适合抽象工厂模式,根据具体不同(材质)系列工厂提供相应的产品。

本文为李建忠设计模式视频的笔记以及《设计模式-可复用面向对象的软件的基础》和自己的部分见解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/308898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Builder(生成器)--对象创建型模式

Builder(生成器)–对象创建型模式 一、意图 将一个复杂的对象构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 二、动机 1.在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对…

Gartner:缺乏技术人才将影响企业数字化转型

导语大多数公司在数字化转型的阶段对所需的技能方面都处于“盲目”状态。正文随着COVID-19响应加快了数字化转型的速度和规模,缺乏数字化技能可能会危害人才计划不统一的公司。甚至在冠状病毒大流行之前,董事会就将数字/技术中断列为2020年的头等大事&am…

DEBUG org.springframework.web.servlet.DispatcherServlet - Error rendering view [org.thymeleaf.spring

报错信息如下: 报错原因: thymeleaf有一些限制,使用th语言,内容为空就会报错 改成这样解决问题:

Factory Method(工厂方法)--对象创建型模式

Factory Method(工厂方法)–对象创建型模式 一、意图 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。 二、动机 1.在软件系统中,经常面临着创建对象的工作;由于需求的变化…

全内存的redis用习惯了?那能突破内存限制类redis产品ssdb呢?

首先说一下背景,在双十一的时候,我们系统接受X宝的订单推送,原先的实现方式是使用 redis 的 List 作为推送数据的承载,在非大促的场景下,一切运行正常,内存占用大概3-4G,机器是16G内存。由于提前…

Prototype(原型)--对象创建模式

Prototype(原型)–对象创建模式 一、意图 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 二、动机 1.在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些…

认证授权方案之授权揭秘 (上篇)

一、前言回顾:认证授权方案之授权初识从上一节中,我们在对授权系统已经有了初步的认识和使用,可以发现,asp.net core为我们提供的授权策略是一个非常强大丰富且灵活的认证授权方案,能够满足大部分的授权场景。在Config…

Singleton(单件)--对象创建模式

Singleton(单件)–对象创建模式 一、意图 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 二、动机 1.在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的…

龙芯团队 在移值 MIPS64 下的.NET Core 进度速报

写在开始前我们的主要业务基于 dotnet core 2.x 与 3.1 完成,目前 dotnet core 3.1 支持的 CPU 架构列表中还不包含龙芯,且在 gitlab issue 中表示官方当前没有对 MIPS 的支持计划。更具体操作系统与 CPU 架构列表见 [Download .NET Core 3.1](https://d…

Adapter(适配器)--类对象结构型模式

Adapter(适配器)–类对象结构型模式 一、意图 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本接口不兼容而不能一起工作的那些类可以一起工作。 二、动机 1.在软件系统中,由于应用环境的变化,常常需要将“一…

如何使用ABP框架(2)三层架构与领域驱动设计的对比

本文来自长沙.NET技术社区,原创:邹溪源。全文共有8500字,读完需耗时10分钟。题图来自pixabay简述上一篇简述了ABP框架中的一些基础理论,包括ABP前后端项目的分层结构,以及后端项目中涉及到的知识点,例如DTO…

Bridge(桥接)--对象结构模式

Bridge(桥接)–对象结构模式 一、意图 将抽象部分与它的实现部分分离,使它们都可以独立的变化。 二、动机 1.由于某些类型的固有的实现逻辑,使得它们具有两个变化的维度,乃至多个纬度的变化。 2.如何应对这种“多维度…

Composite(组合)--对象结构型模式

Composite(组合)–对象结构型模式 一、意图 将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。 二、动机 1.软件在某些情况下,客户代码过多的依赖于对象容器复杂的内部实现结构…

[SpringBoot2]ajax函数中data参数的数据设置方式

ajax函数中data参数的数据设置方式:

Blazor带我重玩前端(二)

概览Blazor目前有两种托管模式,一种是Server-Side模式,一种是WebAssembly模式。官方首先支持的是Service-Side模式,使用WebAssembly模式,需要更新到最新版VS2019。小编目前的精力是更多的专注于Blazor-WebAssembly模式的研究&…

Decorator(装饰)--对象结构型模式

Decorator(装饰)–对象结构型模式 一、意图 1.动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。 二、动机 1.在某些情况下我们可能会“过度地使用继承来扩展对象的功能”, 由于继承为类…

Facade(外观)--对象结构型模式

Facade(外观)–对象结构型模式 一、意图 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 二、动机 1.上述左边方案的问题在于组件的客户和组件中各种复杂的子系…

.NET Core微服务开发网篇-ocelot

通过上篇我们知道,网关是外部访问的统一入口,本文采用Ocelot作为Api网关。环境要求:vs2019.NetCore3.1Ocelot16.0.1创建一个产品服务Api站点(AAStore.ProductCatalog.Api)添加一个ProductController[Route("api/[…

Flyweight(享元)--对象结构型模式

Flyweight(享元)–对象结构型模式 一、意图 运行共享技术有效地支持大量细粒度的对象。 二、动机 1.在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价——主要指内存需求方面的代价。 2.…

IBM 声明对 Google 违背承诺未将 Istio 贡献给 CNCF 表示失望

Jason R McGee,IBM 院士,IBM 云平台副总裁兼 CTO。昨天晚上Google 宣布将 Istio 商标转让给 Open Usage Commons 组织,IBM 当即在 IBM Developer 网站上发表声明对 Google 的做法表示失望。以下为 IBM 云平台副总裁兼 CTO Jason R McGee 的声…