`
heiren3821
  • 浏览: 6534 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

原始模型模式

阅读更多

原始模型模式:

<o:p> 参考书籍:阎老师的<<java与模式>></o:p>

<o:p>网络文章:追mme与java的23个模式
</o:p>

定义:通过一个原始模型的对象来指明索要创建的类型 然后用复制这个原始类型的方法创造出更多的同类型的对象

<o:p> </o:p>

个人理解:

我觉的要理解原始模型模式  首先 有两个概念要搞清楚:

第一  对象引用

第二  复制

---------------------------------------------我是分割线-----------------------------------------

1:对象引用

对象引用:主要是指对象在堆栈里面的互相引用 其实并没有占用多余的内存空间 只是在栈空间了多少设置了一个引用

EX

A  a = new A();

A b = a ;

这样的过程  实际就是 第一步: 在堆里面创建了一个对象A 同时在栈里面创建了引用a

第二步:在栈里面创建一个引用b  指向了生成的a的实例

所以如果b对象里面的属性改变了 a对象里面的属性也就跟着改变了

java里面没有指针的概念  但是有句柄的概念 如果传递了一个句柄 实际就是传递了这个对象的引用。

所以如果你建的类 里面存在循环调用  如果实例化的话 就会把栈空间消耗完 

java.lang.StackOverflowError

 ---------------------------------------------我是分割线-----------------------------------------

2:复制

复制 

<!---->l         <!---->应该是相对于引用来说的

<!---->l         <!---->复制包括 浅复制 和深复制

---------------------------------------------我是分割线-----------------------------------------

浅复制:

浅复制在java中的实现就是object clone()方法

Java里面所有的类都继承了object

如果这个要想能够复制 还必须实现 cloneable接口(里面什么也没有  但是如果不实现这个接口的话  使用object.clone()方法的时候 就会抛出cloneNotSupportException的异常)

现在假设 A实现了cloneable接口

EX:

A a = new A();

A b = a.clone();

第一步  在内存里面创建一个a 对象

第二步 复制一个a对象 传递给b

这个时候 a 里面的基本类型和b的基本类型是一样的 但是存放在不同的内存地址上

所以  此时修改a的基本属性以后  b的基本属性是不会变化的  这就是复制

浅复制 顾名思义 就是复制的很基本  复杂的基本类型就不复制了

所以如果A类里面有比较复杂的人为创建的对象的话  浅复制 还是只是建立一个引用没有复制具体的内容

 ---------------------------------------------我是分割线-----------------------------------------

深复制:

相对于浅复制来说的 :他能够避免掉浅复制不能完全复制复杂对象的缺点

java中实现深复制是使用serializable 接口

EX

A a = new A();

ByteArrayOutputStream bos = new ByteArrayOutputStream();<o:p></o:p>

ObjectOutputStream oos = new ObjectOutputStream(bos);<o:p></o:p>

oos.writeObject(obj);<o:p></o:p>

ByteArrayInputStream ois = new ByteArrayInputStream(bos.toByteArray());

A b = (A)ois.readObject();

<o:p> </o:p>

因为在流传输的过程中已经和jvm 脱离了 所以复制的东西全部都以 流的形式出去了 脱离了jvm 当重新再被读近来的时候 就是一个新的对象了。

这里的所有都是要在内存里面重新实例化的 所以就是深复制

<o:p> ---------------------------------------------我是分割线-----------------------------------------</o:p>

引用:

4PROTOTYPE―MMQQ聊天,一定要说些深情的话语了,我搜集了好多肉麻的情话,需要时只要copy出来放到QQ里面就行了,这就是我的情话prototype了。(100块钱一份,你要不要)
  
  原始模型模式:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。原始模型模式允许动态的增加或减少产品类,产品类不需要非得有任何事先确定的等级结构,原始模型模式适用于任何的等级结构。缺点是每一个类都必须配备一个克隆方法。<o:p></o:p>

<o:p> </o:p> ---------------------------------------------我是分割线-----------------------------------------

在这里面作者把情话作为一个要复制的对象,感觉上面和原始模型模式有些勉强。<o:p></o:p>

Mm最近倒霉  手机丢了 为了不让他们家里人发现 mm要求你给他买一个一模一样的手机来蒙横家里人 <o:p></o:p>

如果你有mm手机的原始模型你复制一个就可以 如果没有 就花点银子到商店里面去买一个 这时候对应得手机的类就是一个原始模型类 需要手机的时候 生产线装配一部就可以了
分享到:
评论

相关推荐

    java设计模式(简化版的big java)

    本篇将基于提供的内容简要介绍Java的五种设计模式:工厂模式、建造者模式、工厂方法模式、原始模型模式和单例模式。 1. **工厂模式**: 工厂模式是一种简单的创建型设计模式,它提供了一个创建对象的接口,但允许...

    关于-23种设计模式的有趣见解.doc

    本文将深入解析五个常见的设计模式,分别是工厂模式、建造者模式、工厂方法模式、原始模型模式和单例模式。 1. **工厂模式**: 工厂模式是一种简单的创建型模式,它定义了一个创建对象的接口,但由子类决定要实例化...

    OO中对于23种设计模式的整理

    原始模型模式允许动态的增加或减少产品类,产品类不需要非得有任何事先确定的等级结构,原始模型模式适用于任何的等级结构。缺点是每一个类都必须配备一个克隆方法。 5. 单例模式(Singleton Pattern) 单例模式...

    java与模式

    1:模式的简史和形而上学;2:统一建模语言UML简介;...20:原始模型模式;21:javabean冷藏和解冻;22:适配器模式;23:缺省适配器模式;24:合成模式;25:装饰模式;26:设计模式在JAVA I/O设计原则;28:代理模式;....

    设计模式

    原始模型模式是通过克隆已有对象来创建新对象的设计模式。它提供了一种通过复制现有的对象来创建新对象的方式,减少了创建新对象的复杂度,尤其适用于对象创建成本较高的情况。原始模型模式需要提供一个克隆方法,...

    Java的23种设计模式.pdf

    4. 原始模型模式(Prototype模式):原始模型模式允许通过复制原型对象来创建新对象,提供了动态地增加或减少产品类的能力,且无需关心产品的具体实现细节。 5. 单例模式:单例模式保证一个类只有一个实例,并提供...

    关于-设计模式的经典文章.doc

    原始模型模式通过克隆已有对象来创建新对象,简化了对象的创建过程。客户端可以要求一个原型对象克隆自身,以得到与原型相同或相似的新对象,而无需知道具体实现细节。 5. 单例模式(Singleton): 单例模式确保...

    常用经典JAVA,J2EE设计模式大全

    原始模型模式使用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象;单例模式保证一个类只有一个实例,并提供一个全局访问点。 结构型模式关注类和对象的组合。适配器模式允许不兼容的接口进行合作,...

    JAVA与模式

    &lt;br&gt;第一部份、UML和模式介绍 com.javapatterns.uml 统一建模语言UML... com.javapatterns.prototype 原始模型模式 com.javapatterns.serializable 专题:JavaBean的“冷藏”和“解冻”

    java和设计模式ppt教程

    java和设计模式ppt包含工厂模式、建造模式、原始模型模式、单例模式、结构模式、适配器、桥梁模式、合成模式、装饰模式、门面模式、享元模式、代理模式、行为模式、解释器模式、迭代子模式、调停者模式、备忘录模式...

    UML类图的简介

    7. **原始模型模式(Prototype)**:通过克隆原型对象来创建新对象,简化了对象的创建过程。原始模型模式适用于需要频繁创建相似对象的情况,但要求所有类都实现克隆接口。 8. **代理模式(Proxy)**:为其他对象...

    RFM模型分析及原模型

    在提供的"RFM模型(原始数据聚类).xml"文件中,很可能包含了原始的RFM数据,通过导入到SPSS中,我们可以进行数据的清洗、转换、聚类分析等一系列操作,最终得出有价值的客户群体划分。 通过RFM模型分析,企业不仅...

    一种基于迭代的关系模型到本体模型的模式匹配方法.pdf

    该方案的核心是在模式匹配过程中,利用已匹配的元素对对原始匹配算法进行优化,使其更好地适应数据源的本地化特性,从而提高匹配的准确性。在实际的“餐饮信息管理”案例中,实验结果显示,该方法的模式匹配效果显著...

    mdlvis 魔兽模型编辑器

    然而,需要注意的是,任何对原始模型的修改都可能会影响游戏的兼容性和稳定性,因此在进行修改时需谨慎操作。 在压缩包子文件的“模型编辑”目录下,可能包含了mdlvis的安装程序、教程文档、示例模型文件以及其他...

    XGM2019重力场模型

    此外,该模型在海洋学中也有重要应用,可以揭示海流模式,辅助预测天气和海平面变化。 四、文件构成 压缩包中的“XGM2019”可能是模型的基础数据文件,包含重力场的原始数据;“XGM2019e”可能代表模型的增强版或...

    基于多级注意力机制的并行预测模型:即刻运行,包含原始与划分数据集的全面解决方案,基于多级注意力机制的并行预测模型:即刻运行,包含原始与划分数据集的预测解决方案,基于多级注意力机制的并行预测模型 进行预

    多级注意力机制是一种先进的机器学习技术,它通过模拟人类的注意力分布来提高模型对于...结合原始和划分好的数据集,这种模型能够为用户提供快速、准确的预测结果,适用于需要处理大量数据和追求高效率的各种应用场景。

    基于PaddlePaddle实现的密度估计模型CrowdNet预测模型

    深度学习模型,如CrowdNet,通过学习大量的标注图像,学习从原始像素到人群密度分布的映射。这种映射过程涉及到复杂的特征提取,例如多尺度信息处理,以便更准确地识别不同大小和形状的人头。 3. **CrowdNet模型...

    ARIMA模型例题.doc

    通过时间序分析,可以对数据中的规律和模式进行识别,从而对未来数据进行预测和分析。 二、ARIMA模型的原理 ARIMA模型是AutoRegressive Integrated Moving Average的缩写,是一种常用的时间序模型。ARIMA模型由三...

Global site tag (gtag.js) - Google Analytics