基本概念
原始模型属于对象的创建模式。通过给出一个原型对象来指明所要创建的对象的类型,然后调用赋值这个原型对象的办法来创建出更多同类型的对象。
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与模式》,阎宏,第二十章,原始模型模式。
分享到:
相关推荐
本资料包“基于python的CTR模型代码和学习笔记总结”提供了一个深入学习和实践CTR模型的资源集合,特别适合对机器学习、数据分析和Python编程感兴趣的开发者。 首先,我们来看看Python在CTR模型中的应用。Python是...
个人学习笔记及原始讲义的资料集合,为深入学习提供了宝贵的资源。 笔记分为上下两部分,全面覆盖了课程的所有主题,包括监督学习、无监督学习、神经网络、深度学习、支持向量机、集成方法、强化学习等。这些笔记...
学习笔记:大模型课程ChatGPT对话内容。 自回归模型是一种统计模型,它使用观察值的历史值(也就是它们的滞后值)作为预测因子。在自然语言处理(NLP)中,自回归模型被用来预测序列中的下一个单词,基于前面的所有...
这个PDF学习笔记是开发者深入理解JDK 7特性和功能的重要参考资料。以下是对Java JDK 7的一些核心知识点的详细阐述: 1. **泛型改进**:在JDK 7中,泛型的使用更加灵活,引入了类型推断(Type Inference)特性,通过...
### 深度学习理论学习笔记 #### 一、概述 人工智能(Artificial Intelligence, AI)作为一项前沿技术,一直是人类追求的梦想之一。虽然计算机技术取得了显著进步,但在真正意义上实现具备自我意识的智能体方面仍然...
机器学习课程 完整学习笔记+原始版讲义教程学习资料 (1)线性回归、logistic回归和一般回归.pdf (10)主成分分析.pdf (11)独立成分分析.pdf (12)线性判别分析.pdf (13)因子分析.pdf (14)增强学习.pdf (15)典型关联分析...
本知识点的标题为“Java学习笔记(必看经典)”,意味着所整理的内容是针对Java初学者的一系列核心概念和原理的总结。 首先,面向对象编程是Java语言的核心,它与传统的面向过程编程有显著的不同。面向对象编程强调的...
《机器学习学习笔记》是由Jim Liang编写的700多页的PPT教程,它为初学者提供了全面而深入的机器学习入门指导。这份资料涵盖了广泛的机器学习主题,包括基础概念、算法以及实践应用。以下是对每个主要知识点的详细...
这些笔记覆盖了机器学习中的基础理论、常用算法及其背后的数学原理,对于深入理解机器学习有着重要作用。通过吴恩达教授的课程,你可以系统地学习并掌握这些知识,提升你在机器学习领域的专业素养。
### 扩散概率模型论文学习笔记 #### 一、概率论相关 在研究扩散概率模型时,概率论的基础知识尤其重要。本节将详细介绍条件概率的一般形式以及基于马尔科夫假设的条件概率。 ##### 条件概率的一般形式 条件概率...
判别模型和产生式模型是两种常见的机器学习模型。判别模型直接建模条件概率分布p(y|x),而产生式模型则建模联合概率分布p(x,y)。常见的判别模型包括SVM、逻辑回归等;常见的产生式模型包括朴素贝叶斯、隐马尔可夫...
EAST学习笔记1是关于 EAST 模型的学习笔记,EAST 模型是一种用于文本检测和识别的深度学习模型。该模型的架构清晰,主要由 Unet 作为主体结构,backbone 可以任选 feature extractor,使用 ImageNet 预训练即可。 ...
欢迎来到斯坦福大学2014年的机器学习课程笔记。这是一份由黄海广同学整理的详尽笔记,他是一位中国海洋大学的2014级博士生。这份笔记是对斯坦福大学提供的机器学习课程视频的个人理解与总结。通过这份笔记,读者可以...
Apollo学习笔记-感知简介 Apollo学习笔记-感知简介是Apollo的核心组件之一,负责感知环境中的物体和事件。下面是Apollo学习笔记-感知简介的相关知识点: 1. 感知步骤: Apollo学习笔记-感知简介中,感知步骤包括...
课程的学习笔记和原始讲义涵盖了广泛的主题,包括监督学习、无监督学习、半监督学习和强化学习。监督学习是机器学习中的主要类别,其中算法通过已有的输入-输出对来学习模型,例如分类和回归问题。吴恩达在课堂上会...
《一份简短的深度学习笔记.pdf》是朱鉴所著的一份学习资料,它提供了深度学习的基础知识,涵盖了从数学基础到算法应用的多个方面。 首先,在数学基础上,深度学习涉及到线性代数、微积分、概率论与信息论等多个领域...
讲义和学习笔记分别以英文和中文的形式提供了深入的见解和解释,便于不同语言背景的学习者理解和掌握。 首先,原始讲义是课程的基础,它详细介绍了机器学习的基本概念,包括监督学习、无监督学习、强化学习等主要...