基本概念
原始模型属于对象的创建模式。通过给出一个原型对象来指明所要创建的对象的类型,然后调用赋值这个原型对象的办法来创建出更多同类型的对象。
Java语言构建模型直接支持原始模型。
变量、对象以及对象的引用
Panda myPanda = new Panda();
这句话代表了一下几个意思:
A.创建了一个Panda类型变量,名字叫myPanda;
B.建立了一个Panda类的对象;
C.使变量myPanda指到这个对象。
如果存在一下赋值:
thatPanda = myPanda;这只是引用的赋值,两个引用同时指向一个唯一的Panda对象。
对象的复制
Clone方法:
当object类的clone方法被调用来复制一个对象时,此对象对其它对象的引用也同时被复制一份。Java语言提供的Cloneable接口只起一个作用,就是在运行期通知Java虚拟机这个可以安全的在这个类上使用clone方法。由于Object类本身没有实现Cloneable接口,所以如果所考虑的类没有实现Cloneable接口时,调用clone方法会跑出CloneNotSupportedException异常。
克隆满足的条件:
A.对任何对象x,有x.clone() ! = x。克隆对象与原对象不是一个对象。
B.对任何对象x,有x.clone() .getClass = = x.getClass。克隆对象与原始对象的类型相同。
C.如果对象x的equal方法定义得当的话,x.clone().equal(x)应当成立。
equal()方法讨论:
当两个变量指向同一个对象时,equal()方法返回true.。被克隆对象按照其内部状态是否可变分为可变对象和不可变对象,不可变对象和可变对象提供的equal()方法的工作方式应当是不同的。
可变对象只有他们是同一个对象时,equal()方法才返回true,所以这样的对象可以直接从Object类继承。不变对象必须含有相同的状态才可能满足这个条件,所以不变类型必须自己实现这个equal()方法。String类的对象属于不变对象。
原始模型的表现形式
原始模型有两种表现形式:简单形式和登记形式。
简单形式的原始模型的三种角色:
客户端角色:客户端提出创建对象的请求。
抽象原型(Prototype)角色:此角色给出所有的具体类型所需的接口。
具体原型(Concrete Prototype):被复制的对象,此角色需要实现抽象的原型角色所要求的接口。
简单原始模型的类图如下:
登记形式的原始模型模式的四种角色:
客户端角色:客户端向管理员提出创建对象请求。
抽象原型角色:与简单形式模型一样。
具体原型角色:与简单形式模型一样。
原型管理器(Prototype Manager)角色:创建具体原型类的对象,并记录每个被记录的对象。
登记式原始模型的类图如下:
两种模式的比较:
A.如果需要创建的原型对象数目比较少而且比较固定的话,可以用简单原始模型。由客户端自己保存原型对象的引用。
B.如果创建原型对象的数目不固定的话,采用登记式的原型对象,客户端不用保存对原型对象的引用,交给管理员来做。在复制一个对象之前,客户端可以查看管理员对象是否已经有一个满足要求的原型对象,如果有可以直接获取对象的引用,如果没有则自己创建。
在什么情况下使用原始模型
如果一个系统的产品类是动态加载的,且具有一定的等级结构,这个时候可以采用工厂模式。但是产品类的等级结构一旦发生变化,工厂类的等级结构就必须有一个相应的变化。这时采用原始模型,给每个产品配备一个clone()方法,便可以避免使用工厂模式所带来的具有固定等级结构的工厂类。
一个使用原始模式的系统与它的产品对象是怎么创建出来的,以及这是产品对象之间的结构是怎么样的,以及这个结构会不会发生变化是没有关系的。
原始模型的优缺点
(1)原始模型允许动态加载或减少产品类。
(2)原始模式提供简化的创建模式。
(3)具有给一个应用软件动态加载新功能的能力。
(4)产品类不需要有事先确定的等级结构,因为原始模型适用于任何的等级结构。
原始模型的主要缺点就是,每个类都必须有一个克隆方法。
参考文献:《Java与模式》,阎宏,第二十章,原始模型模式。
分享到:
相关推荐
学习笔记:大模型课程ChatGPT对话内容。 自回归模型是一种统计模型,它使用观察值的历史值(也就是它们的滞后值)作为预测因子。在自然语言处理(NLP)中,自回归模型被用来预测序列中的下一个单词,基于前面的所有...
机器学习课程 完整学习笔记+原始版讲义教程学习资料 (1)线性回归、logistic回归和一般回归.pdf (10)主成分分析.pdf (11)独立成分分析.pdf (12)线性判别分析.pdf (13)因子分析.pdf (14)增强学习.pdf (15)典型关联分析...
在各种浏览器中存在四种事件模型:原始事件模型、标准事件模型、IE事件模型,还有一种Netscape4事件模型,下面具体介绍一下。 1、目前共存在四种事件处理模型分别是:原始事件模型、标准事件模型、IE事件模型,还有...
深度学习(Deep Learning)是机器学习的一个分支,其核心思想是通过构建和训练深层神经网络模型,从大规模的数据中学习和...端到端学习:深度学习模型能够从原始输入直接学习到输出结果,实现端到端的学习和推断过程。
灰色预测具体代码实现,含原始数据。本资源针对湖南省未来人口预测问题,给出了预测结果。
公开课笔记7——最优间隔分类、原始/对偶问题、SVM对偶 公开课笔记8———核技法、软间隔分类器、SMO算法 公开课笔记9—偏差/方差、经验风险最小化、联合界、一致收敛 公开课笔记10——VC维、模型选择、特征选择 ...
Spark通过partitionBy运算符对原始RDD进行数据再分配从而创建一个新的RDD。通过RDD之间的依赖关系形成了Spark的调度顺序。 1.RDD的几种创建方式: (1).从hadoop文件系统输入创建如HDFS,也可以是其他与hadoop兼容的...
18 、如何扩展 IE 或 WebBroswer 控件提供的文档对象模型( DOM )? 19 、如何给 WebBroswer 控件的扩展文档对象(文档 .external )提供事件能力 ? 20 、如何打开流中的 HTML 文档? 21 、如何使 Web 页面中的...
在极客时间《AI 大模型应用开发实战营》中,我学习了 AI 大模型的应用开发,并且根据所学内容开发了进阶版本的 OpenAI-Translator。这个版本需要实现四个主要特性:支持图形用户界面(GUI),添加对保留源 PDF 的...
机器学习模型应关注降低泛化误差。 模型选择 1.验证数据集 我们可以预留一部分在训练数据集和测试数据集以外的数据来进行模型选择。这部分数据被称为验证数据集,简称验证集(validation set)。 2.K折交叉验证 把...
是一种开放标准格式,用于表示机器学习模型。 ONNX得到了许多合作伙伴的支持,这些合作伙伴已经在许多框架和工具中实现了该功能。 ONNX模型动物园是由像您这样的社区成员提供的ONNX格式的经过预训练的最新模型的...
火箭MQ学习笔记 ,特别是 公共组件 Apache RocketMQ 是一个分布式消息传递和流媒体平台,具有低延迟,高性能和可靠性,万亿级容量和灵活的可伸缩性。 它具有多种功能: 消息模式,包括发布/订阅,请求/答复和流式...
这些笔记本使用Python编写,并且包含指向训练数据集的链接以及对描述模型体系结构的原始论文的引用。 笔记本可以导出并作为python(.py)文件运行。 什么是ONNX? 开放式神经网络交换( )是一种表示深度学习模型...
2.3 原始Dao开发方式 18 2.3.1 映射文件 18 2.3.2 Dao接口 19 2.3.3 问题 20 2.4 Mapper动态代理方式 20 2.4.1 实现原理 20 2.4.2 Mapper.xml(映射文件) 20 2.4.3 Mapper.java(接口文件) 21 2.4.4 加载UserMapper....
30s代码学习笔记 大批 orderWith:根据所提供的顺序排列,返回按属性排序的已排序的对象数组 组合:组合两个对象的模型,使用指定的键来匹配对象 hasDuplicates:检查平面副本中是否有重复的值 pullBy:根据给定的...
测试样例是例题数据,学习笔记主要在[本人博客](http://yuenshome.cn)的[《统计学习方法》](http://yuenshome.cn/?cat=202)目录下,也可点击下方目录的章节名阅读笔记。笔记大部分为原书的内容摘抄。 算法主要基于 ...
机械、电子、定时接口通信信道上的原始比特流传输 1.1.2 数据链路层(提供错误监测、纠正) 物理寻址,同时将原始比特流转变为逻辑传输线路 1.1.3 网络层(路由器) 控制子网的运行,如逻辑编制、分组传输...
这项研究使用芝加哥警察局维护的可公开访问的数据库中的2019年和2020年的碰撞报告,创建了机器学习模型来预测车祸的严重性。 如果撞车导致人身伤害或由于撞车而导致汽车拖曳,则认为汽车撞车是严重的。 模型使用分类...
该模型的骨干在德语维基百科语料库上进行了训练,并使用转移学习将其应用于文本分类任务(如“所述)。 更新: 可从以下网站获得使用德语维基百科语料库的预训练语言模型: : 。 感谢您的分享,托马斯! 项目...