原始模型模式

原始模型模式:

<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

第二步:在栈里面创建一个引用指向了生成的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 手机的原始模型你复制一个就可以 如果没有 就花点银子到商店里面去买一个 这时候对应得手机的类就是一个原始模型类 需要手机的时候 生产线装配一部就可以了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值