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

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

一、意图
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

二、动机
1.在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。
2.如果应对这种变化?如何向“客户程序(使用这些对象的程序)”隔离出“这些易变对象”,从而使得“依赖这些易变对象的客户程序”不随着需求改变而改变?

三、适用性
当一个系统应该独立于它的产品创建、构建和表示时,要使用prototype模式;以及
1.当要实例化的类是在运行时刻指定时,例如,通过动态加载;或者
2.为了避免创建一个与产品层次平行的工厂类层次时;或者
3.当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类方便一些。

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

五、效果
1.运行时候增加和删除产品。
2.改变值以指定新对象。
3.改变结构以指定新对象。
4.减少子类的构造。
5.用类动态的配置应用。

六、实现
1.使用一个原型管理器。
2.实现克隆操作。
3.初始化克隆对象。

七、要点总结
1.Prototype模式同样用于隔离类对象的使用者和具体类型(易变类)之间的耦合关系,它同样要求这些“易变类”拥有“稳定的接口”。
2.Prototype模式对于“如何创建易变类的实体对象”采用“原型克隆“的方法来做,它使得我们可以非常灵活地动态创建”拥有某些稳定接口“的新对象——所需工作仅仅是注册一个新类的对象(即原型),然后在任何需要的地方Clone。
3Prototype模式中的Clone方法可以利用某些框架中的序列化来实现深拷贝。

八、举例说明
类似于复制一个东西,然后粘贴。很多语言或者框架都实现了这个机制。

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

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

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

相关文章

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

寄存器基本含义: 寄存器是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工厂,获…

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.…