原型模式笔记(java)

原型模式:

他是一种创建型模式,是原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。允许从一个对象再创建另一个可定制的对象,而且不需要知道任何创建的细节。

 

原型模式的参与者:抽象原型类(Prototype),具体原型类(ConcretePrototype),客户(Client)。

抽象原型类:申明一个克隆自身的接口,给具体原型类所需的接口。

具体原型类:实现了一个克隆自身的操作。

客户:让一个原型类实现从自身克隆出一个新的对象。

 

 

原型模式最困难的部分在于怎么实现具体原型类里的克隆方法。但对象结构包含循环引用时,这极为棘手。大多数对克隆对象提供了一些支持。克隆包括浅克隆和深克隆。

浅克隆:拷贝的对象与原来的对象是共享指针的。当对象克隆后,若原对象中含有引用类型,只要原来的对象中的引用类型发生变化,克隆后的对象中的引用类型也会发生相应的变化。

深克隆:拷贝之后的对象是一个新的指针,原对象的改变不会影响拷贝之后的对象。

 

 

java的所有类都是从java.lang.Object类继承而来的。而Object类提供了对对象的复制的方法:protected Object clone();子类可以把这个方法给覆盖掉,提供满足自己要求的复制方法。java语言还提供了一个Cloneable接口。其起一个标志作用,如果所考虑的类没有实现该接口,则调用Clone()方法时会出现CloneNotSupportException异常。

 

在Java中通过实现Cloneable接口和用java.lang.Object中的Clone()方法来实现克隆只能实现浅克隆。怎样让其成为深克隆呢?若系统中的对象提供了Save和Load操作,那么只需要用Save操作将对象暂时保存到内存缓存区,用Load操作从该缓存区重构该对象来创建一个复本,这样就能实现深克隆。在Java语言中深克隆一个对象常常可以先把对象实现Serializable接口,然后把对象写到一个流中,然后再从这个流中读取出来。Java中可以用ObjectOutputStream--ByteArrayOutputStream写入到内存中,然后通过ByteArrayInputStream--ObjectOutputStream读取对象。获得的对象是复制后的对象。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值