设计模式之原型模式(Prototype)

来源:互联网 发布:mac ubuntu 双系统 编辑:程序博客网 时间:2024/05/17 05:55

原型模式用来创建与现有对象相同的对象,新创建的对象状态完全由对象所属类确定。外部需要与现有对象相同状态的对象时,不需关心对象中的状态,对象如何构造,怎样初始化。只需让对象本身处理新对象的构造。这对于仅关心对象现有状态,不关心以后的状态的需求是很有用的。

如下是原型模式代码:

1、浅拷贝

浅拷贝拷贝对象的对象所有原始数据类型,对于引用类型不进行拷贝。新拷贝的对象中,引用类型对象还是指向与原始对象引用执行相同,也就是其中的引用类型对象未进行拷贝。

/** * 浅复制,仅复制基本类型,不带其他属性。 */@Overridepublic Prototype clone() throws CloneNotSupportedException{try {Prototype p = (Prototype)super.clone();return p;} catch (CloneNotSupportedException e) {// ignore}return null;}

2、深拷贝的两种方式

对于采用流的方式进行拷贝效率较低,并且相应的实体需要实现java.lang.Serializable接口。

/** *  深复制 * @return */public Prototype deepClone(){try {Prototype cloned =  clone();cloned.other = other.clone();return cloned;} catch (CloneNotSupportedException e) {// ignore}return null;}/** *  深复制,此种方式复制较慢,100万对象在i7机器需要10秒以上。 * @return */public Prototype deepClone1(){try {ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();ObjectOutputStream objectOut = new ObjectOutputStream(bytesOut);objectOut.writeObject(this);ByteArrayInputStream in = new ByteArrayInputStream(bytesOut.toByteArray());ObjectInputStream objectInput = new ObjectInputStream(in);return (Prototype)objectInput.readObject();} catch (IOException e) {} catch (ClassNotFoundException e) {}return null;}

0 0