23种设计模式 原型设计模式

article/2025/9/18 13:46:41

原型模式的定义:

  原型模式:使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象。

原型模式的结构:

  原型模式主要包含3个角色:

    

    (1)Prototype(抽象原型类):声明克隆方法的接口,是所有具体原型类的公共父类,它可是抽象类也可以是接口,甚至可以是具体实现类。

    (2)ConcretePrototype(具体原型类):它实现抽象原型类中声明的克隆方法,在克隆方法中返回自己的一个克隆对象。

    (3)Client(客户端):在客户类中,让一个原型对象克隆自身从而创建一个新的对象。

深克隆与浅克隆:

    浅克隆:当原型对象被复制时,只复制它本身和其中包含的值类型的成员变量,而引用类型的成员变量并没有复制。

    

    深克隆:除了对象本身被复制外,对象所包含的所有成员变量也将被复制。

    


简要说明 深度克隆和浅克隆

 浅拷贝:使用一个已知实例对新创建实例的成员变量逐个赋值,这个方式被称为浅拷贝。

 深拷贝:当一个类的拷贝构造方法,不仅要复制对象的所有非引用成员变量值,还要为引用类型的成员变量创建新的实例,并且初始化为形式参数实例值。



原型管理器(项目实战代码):

https://github.com/yzmaodeng/java-keypointknowledge/commit/4e35b9808bcc4e7207c6d1a6cd1e4295e4328ab5

  将多个原型对象存储在一个集合中供客户端使用,它是一个专门负责克隆对象的工厂,其中定义了一个集合用于存储原型对象,如果需要某个原型对象的一个克隆,可以通过复制集合中对应的原型对象来获得。

  

  



深度克隆的两种实现的方式


1、clone

https://blog.csdn.net/yz18931904/article/details/80576574

2、序列化

https://blog.csdn.net/yz18931904/article/details/80577589



最后陈词


优点

      1、如果创建新的对象比较复杂时,可以利用原型模式简化对象的创建过程,同时也能够提高效率。

      2、可以使用深克隆保持对象的状态。

      3、原型模式提供了简化的创建结构。

        4、扩展性好,由于原型模式提供了抽象原型类,在客户端针对抽象原型类进行编程,而将具体原型类写到配置文件中,增减或减少产品对原有系统都没有影响。

  5、:原型模式提供了简化的创建结构,工厂方法模式常常需要有一个与产品类等级结构相同的工厂等级结构,而原型模式不需要这样,圆形模式中产品的复制是通过封装在类中的克隆方法实现的,无需专门的工厂类来创建产品。




缺点

      1、在实现深克隆的时候可能需要比较复杂的代码。

      2、需要为每一个类配备一个克隆方法,而且这个克隆方法需要对类的功能进行通盘考虑,这对全新的类来说不是很难,但对已有的类进行改造时,不一定是件容易的事,必须修改其源代码,违背了“开闭原则”。


使用场景

     1、重复创建有相同的状态的对象的时候。

      2、状态变化很小,占内存不大,原型模式配合备忘录模式来足以。相反,采用状态模式会比原型模式更优。 







http://chatgpt.dhexx.cn/article/6rnKJVuy.shtml

相关文章

OTO模式 传统产业掘金互联网时代的利器

OTO模式 传统产业掘金互联网时代的利器 2013年10月16日 07:11 来源:中国经济网—《证券日报》 编者按:今年以来,一种新型的商业模式OTO模式迅速被国内众多传统企业所熟悉,很多传统企业借助OTO模式实现了从传统产业向互联网时…

OTO电子商务商业模式探析

一、前言 OTO(O2O),即Online to Offline,是将线下商务机会与线上互联网结合在一起,让互联网成为线下交易前台的一种电子商务商业模式,简单来说就是“线上拉客,线下消费”。其核心理念是通过电子…

2020-1024

2020 - 1024 996

1024程序员节

1024是一种逐渐流行的回帖方式,常见于BBS、网络社区和论坛的网友交流中。其常见形式为"1024"、"1024顶"两种形式。 1024所表达的含义,类似于"顶"、"非常棒,一级棒" ,还有表达回帖者的身…

1024,干程序才懂得节日!

1024程序员节 1024程序员节是广大程序员的共同节日。1024是2的十次方,二进制计数的基本计量单位之一。针对程序员经常周末加班与工作日熬夜的情况,部分互联网机构倡议每年的10月24日为1024程序员节,在这一天建议程序员拒绝加班。 程序员就像是…

2022年的1024

一年一度的1024来啦! 今年是我的第6个1024. 在这个专属节日里,我想随性记录一下当下的心境吧: 从2016年接触编程以来,自己各方面都有成长,可是不变的是从最初知道自己是小白到现在知道自己还是小白,笑死…

1024,鸽了1024篇博文的我。。。

1024,鸽了1024篇博文的我。。。 最近,硕士研究生刚开学,鉴于小菜鸡的我刚开始我的“填坑”之路,很忙,对,真的!!! 我在忙什么? 忙于脑网络的学习&#xff0c…

「1024」福利

重点突出 这不是一篇纯技术文,也不是一篇广告文,而是我和明哥等几个 Android 开发者共同在做的一件事:「Android答疑解惑」。 我们在做一个付费的 Android 圈子,这里可以提供 Android系统层和 Android应用层方面的技术&#xff0c…

浅谈1024

说起1024,大家都知道在数学计算中1GB1024MB,1MB1024KB,1KB1024Byte。 对于程序员来说,接触1024的机会非常多,所以被广大程序员称为:程序员节 浅谈自己的1024 我的第1024行代码 if (devicesBean.getMetadat…

1024 - 在这里起航!

写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成…

又一年1024 - 我们在路上!

写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成…

1024——今天我们不加班

今天,是技术人的节日,在二进制构筑的计算机世界里,1024或许是技术人最熟悉的数字。 你知道为什么选择这一天作为中国程序员的共同节日吗? 1024是2的十次方,二进制计数的基本计量单位之一。程序员(英文Programmer)是从…

1024你懂得

1024程序员节是广大程序员的共同节日。1024是2的十次方,二进制计数的基本计量单位之一。针对程序员经常周末加班与工作日熬夜的情况,部分互联网机构倡议每年的10月24日为1024程序员节,在这一天建议程序员拒绝加班。 程序员就像是一个个1024&a…

1024共创程序世界

1024共创程序世界 1024定为程序员节的缘由: 1024是2的十次方,是二进制计数的基本计量单位之一, 也是运行程序的基础,而且1024是程序员常用的数字。 程序员是从事程序开发、程序维护的专业人员。一般将程序员分为程序设计人员和程序编码人员,但两者的界限并不非常清…

什么是1024,为什么是1024?

非常感谢你阅读本文~ 欢迎【👍点赞】【⭐收藏】【📝评论】~ 放弃不难,但坚持一定很酷~ 希望我们大家都能每天进步一点点~ 本文由 二当家的白帽子 https://le-yi.blog.csdn.net/ 博客原创~ 二当家的祝所有的 程序猿/媛 节日快乐,一…

1024,你懂的

哎呀,是不是被标题党套路了,不过认真读完,会有收获的哦,相信我。话说小拾君最近逛知乎,无意间被某些帖子指引,发现知乎已经快被1024攻占了,哈哈,然后今天准备跟大家科普一下1024。各位老司机们看看就好,千万不要开车....... 1024的起源。 经小拾君向诸多老司机求证,以…

smooth L1 loss个人理解

最近在整理目标检测损失函数,特将Fast R-CNN损失函数记录如下: smooth L1 损失函数图像如下所示: L1损失的缺点就是有折点,不光滑,导致不稳定。 L2 loss的导数(梯度)中包含预测值与目标值的差值…

L1和L2范数

L0范数是指向量中非0的元素的个数。如果我们用L0范数来规则化一个参数矩阵W的话,就是希望W中非0元素的个数最少,即大部分元素都是0。换句话说,希望让参数W是稀疏的。 L1范数是指向量中各个元素绝对值之和,也有个美称叫“稀疏规则…

L1 loss L2 loss Smooth L1 loss

L1 loss & L2 loss & Smooth L1 loss 微信公众号:幼儿园的学霸 个人的学习笔记,关于OpenCV,关于机器学习, …。问题或建议,请公众号留言; 关于神经网络中L1 loss & L2 loss & Smooth L1 loss损失函数的对比、优缺点分析 目录…