注册
 找回密码
 注册
江西广告网
查看: 344|回复: 0
打印 上一主题 下一主题

原型(prototype)模式浅析

[复制链接]

该用户从未签到

1
跳转到指定楼层
发表于 2009-2-12 09:00:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
要理解原型原型模式必须先理解Java里的浅复制和深复制。有的地方,复制也叫做克隆。Java提供这两种克隆方式。 浅克隆:被克隆对象的所有变量都含有与原来的对象相同的值,而它所有的对其他对象的引用都仍然指向原来的对象。换一种说法就是浅克隆仅仅克隆所考虑的对象,而不克隆它所引用的对象。 深克隆:被克隆对象的所有变量都含有与原来的对象相同的值,但它所有的对其他对象的引用不再是原有的,而这是指向被复制过的新对象。换言之,深复制把要复制的对象的所有引用的对象都复制了一遍,这种叫做间接复制。深复制的源代码如下: public Object deepClone() throws IOException, OptionalDataException, ClassNotFoundException { //write to stream ByteArrayOutputStream bo = new ByteArrayOutputStream(); ObjectOutputStream oo = new ObjectOutputStream(bo); oo.writeObject(this); //read from stream ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray()); ObjectInputStream oi = new ObjectInputStream(bi); return (oi.readObject()); } Java语言的构建模型直接支持原型模型模式,所有要克隆的类必须实现一个标识接口Cloneable。所有的类都有一个Clone()方法(Object提供)。克隆满足的条件:对于任何对象x,都有x.clone()!=x,换言之,克隆的对象不是原来的对象;x.clone().getClass()==x.getClass(),换言之,克隆的对象与原对象是同一类型。x.clone().equals(x)成立。 public class Sheep implements Cloneable { private String name = "Dolly"; public Object clone() throws CloneNotSupportedException { return super.clone(); } }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表