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

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

一、意图
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。

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

三、适用性
1.当一个类不知道它所必须创建对象的类型的时候。
2.当一个类希望由子类来指定它所创建的对象的时候。
3.当类创建对象的职责委托给多个帮助子类的中的某一个,并且你希望将哪一个帮助子类是代理着这一信息局部变化的时候。

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

五、效果
1.为子类提供挂钩(hook)。
2.连接平行的类层次。

六、实现
1.Creator类是一个抽象并且不提供它所声明的方法的实现;Creator类是一个具体的类而且为工厂方法提供缺省的实现。
2.参数化工厂方法。
3.特定语言的变化和问题。
4.使用模板已避免创建子类。
5.命名约定。

七、要点总结
1.Factory Method模式用于隔离类对象的使用者和具体类型之间的 耦合关系。面对一个经常变化的具体类型,紧耦合关系(new)会导 致软件的脆弱。
2.Factory Method模式通过面向对象的手法,将所要创建的具体对象工作延迟到子类,从而实现一种扩展(而非更改)的策略,较好地解决了这种紧耦合关系。
3.Factory Method模式解决“单个对象”的需求变化。缺点在于要求创建方法/参数相同。

八、举例说明:
想造一个椅子,具体怎么造等客户来了才决定。主要思想将实现延迟到子类实现。

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

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

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

相关文章

[计组]寄存器和存储器的区别

寄存器存在于CPU中,速度很快,数目有限; 存储器是内存,速度稍慢,但数量很大。 寄存器的功能是存储二进制代码,是由具有存储功能的触发器组合起来构成的。一个触发器可以存储1位二进制代码,故存…

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

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

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

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

[计组]寄存器的基本含义

寄存器基本含义: 寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。其实寄存器就是一种常用的时序逻辑电路,但这种时序逻辑电路只包含存储电路。寄存器的存储电路是由锁存器或触发器构成的&#xff0c…

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

一、前言回顾:认证授权方案之授权初识从上一节中,我们在对授权系统已经有了初步的认识和使用,可以发现,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.在软件系统中,由于应用环境的变化,常常需要将“一…

[计组]压缩BCD码指二进制编码的十进制

压缩BCD码指二进制编码的十进制 压缩BCD码指一个字节8位存储2位BCD码。比如32用8421BCD码表示如下:非压缩BCD码表示:00000011 00000010;压缩BCD码表示:0011 0010;使用BCD码表示10进位制数字比较好理解,且占…

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

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

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

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

自然数,实数,有理数,整数,分数,无理数

自然数:即非负整数 实数:包括有理数和无理数 有理数:整数、分数 整数包括:0、正整数和负整数 分数:包括正分数和负分数 无理数:无限不循环小数 自然数用以计量事物的件数或表示事物次序的数。即用数码…

数学中R,Z,N,Q都代表什么意思?

N:非负整数集合或自然数集合{0,1,2,3,…n} R:实数集合(包括有理数和无理数) Z:整数集合{…,-1,0,1,…} Q:有理数集合 N*/ N:正整数集合{1,2,3,…n} 在数学中没有用Z*表示的概念。 其他常见集合符号&a…

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

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

魔幻艰难的2020上半年!

阅读本文大概需要 2.8分钟。告诉大家一个很震惊的消息!2020年已度过一半!在过去这半年的时间里,这个世界发生了巨大变化,并且很难恢复如初。2019年的最后一天,罗胖在跨年演讲中借用何帆老师的一句话与众人共勉&#xf…

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

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

Blazor带我重玩前端(二)

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

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

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

[mybatis]Getting Started

总体流程 1.根据xml配置文件(全局配置文件)创建一个SqlSessionFactory对象2.sql映射文件;配置了每一个sql,以及sql的封装规则等3.将sql映射文件注册在全局配置文件中4.写代码1)根据全局配置文件得到SqlSessionFactory2)使用sqlSession工厂,获…