原型模式
1、结构
原型类必须实现一个标示接口Cloneable,表示这个类支持复制,否则调用clone方法会报CloneNotSupportException异常。
2、浅克隆和深克隆
(1)浅克隆
被复制对象的所有变量都与原来的对象相同,而所有对其他对象的引用都指向原来的对象。
(2)深克隆
深克隆不仅被复制的所有变量与原理啊对象相同,而且其他对象的引用也会被创建一个新对象。
3、代码
原型类
public class Prototype implements Cloneable { private ArrayList list = null; public Prototype() { super(); list = new ArrayList(); for(int i = 0; i < 10000; i++){ list.add("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"+i); } } @Override protected Object clone() throws CloneNotSupportedException { Prototype p = null; p = (Prototype)super.clone(); p.list=(ArrayList)this.list.clone(); return p; } public ArrayList getList() { return list; } public void setList(ArrayList list) { this.list = list; } }
原型子类
public class ConcretePrototype extends Prototype implements Serializable{ public void show(){ System.out.println("原形模型实现类-->"+this); } /** * 通过串行化实现深度克隆 * @return * @throws Exception */ public Object deepClone() throws Exception{ ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(this); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bais); return ois.readObject(); } }
测试类
public class Client { /** * 原型模式测试 * 通过测试通过clone获得10000个对象用时516毫秒,通过new方法获得10000个对象用时42047毫秒,第三种deepClone获得10000个对象用时41880毫秒。 * 因此 * 1、性能好: * 通过clone获得对象要比new获得一个对象在性能上好的多。 * 主要是在对象构造方法中存在大量的数据处理,而clone过程是二进制流的拷贝,不会执行构造方法 * 2、简化对象的操作 * 只要通过clone方法就可以获得一个新的对象。(并且属性和主对象一致) * @param args * @throws CloneNotSupportedException */ public static void main(String[] args) throws CloneNotSupportedException { Date start = new Date(); ConcretePrototype prototype = new ConcretePrototype(); for(int i = 0; i < 10000; i++){ // ConcretePrototype p = (ConcretePrototype)prototype.clone(); // ConcretePrototype p = new ConcretePrototype(); ConcretePrototype p = null; try { p = (ConcretePrototype)prototype.deepClone(); } catch (Exception e) { e.printStackTrace(); } p.show(); } Date end = new Date(); System.out.println(end.getTime() - start.getTime()); } }
4、总结
(1)、性能好:
通过clone获得对象要比new获得一个对象在性能上好的多。
主要是在对象构造方法中存在大量的数据处理,而clone过程是二进制流的拷贝,不会执行构造方法
(2)、简化对象的操作
只要通过clone方法就可以获得一个新的对象。(并且属性和主对象一致)
相关推荐
4 原型模式.txt
原型模式实践代码
这个是http://blog.csdn.net/dawanganban/article/details/9900539博客中java设计模式的源代码。下载前请先看《设计模式——原型模式》一文。
c# 设计模式 原型模式
设计模式之原型模式的Java版本实现和UML类设计图
设计模式专题之(五)原型模式---设计模式原型模式示例代码(python--c++)
自总结讲解原型模式PPT文档
设计模式的原型模式的例子,希望对大家有用~~~~~~~~
java 原型模式
设计模式C++学习之原型模式(Prototype)
实验六:原型模式.rar实验六:原型模式.rar关于java设计模式
iOS设计模式之原型模式 博客地址:http://blog.csdn.net/ioswyl88219/article/details/17662945
该代码是android应用设计模式之原型模式小例子
原型模式的示例代码和文档,学习原型模式的参考资料。
java 设计模式之原型模式
原型模式 用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象 从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节 克隆的优点 一般在初始信息不发生变化的情况下,克隆是最好的...
6、原型模式(Prototype Pattern) 用意:通过拷贝创建一个新的对象
即原型模式,提供一个已经存在的对象进行新对象创建的接口,一般情况下都是使用Clone接口。 此模式非常简单,简单的说就是复制多个当前对象供使用。Prototype模式允许一个对象再创建另外一个可定制的对象,根本...