原型模式
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
原型模式是一种设计模式,主要应用于软件工程领域,用于创建重复的对象,而无需再次进行实例化。在Java、C#等面向对象的语言中,原型模式通过实现`Cloneable`接口或使用序列化机制来实现对象的复制。在这个"原型模式...
**原型模式** 原型模式是一种创建型设计模式,它允许我们创建对象的克隆,而无需知道具体的实现细节。在软件工程中,当我们需要创建多个相似的对象时,使用原型模式可以大大提高效率,避免了每次都去创建新的对象。...
原型模式(Prototype Pattern)是其中一种行为设计模式,主要用于对象创建。它通过复制已有对象来创建新对象,而不是通过传统的构造函数来创建。在Java中,原型模式可以有效地提高性能,特别是在创建复杂对象时。 #...
**原型模式(Prototype Pattern)**是软件设计模式中的结构型模式之一,主要用来简化实例化过程,减少类的创建。在原型模式中,一个对象可以被用作创建其他新对象的模板,通过复制已有对象来创建新对象,而不是通过new...
原型模式(Prototype Pattern)是一种创建型设计模式,它允许我们通过复制现有的对象来创建新对象,而无需知道具体创建过程的细节。这种模式的核心在于,它提供了一种对象克隆的简便方法,使得对象的创建过程对用户...
本文将深入探讨一种常见的设计模式——原型模式(Prototype Pattern),并结合具体的iOS应用场景进行解析。 原型模式是一种创建型设计模式,它的主要思想是通过复制已有对象来创建新对象,而不是通过构造函数来创建...
原型模式(Prototype Pattern)是软件设计模式中的一种结构型模式,它的主要目的是通过复制已有对象来创建新对象,从而减少创建新对象的成本。在原型模式中,类的实例化过程被替换为对已有实例的克隆操作,尤其适用...
在这个实验六:“原型模式.rar”中,我们将深入理解并实践如何在Java中实现原型模式。 首先,原型模式的核心思想是通过拷贝已有对象来创建新对象,而不是从零开始创建。这种模式在处理复杂对象或者需要大量初始化...
本文将深入探讨Android设计模式中的“原型模式”(Prototype Pattern),并结合提供的"prototype"压缩包中的示例代码进行解析。 原型模式是一种创建型设计模式,它的主要思想是通过复制已有对象来创建新对象,而...
原型模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在原型模式中,一个对象可以被克隆以创建新对象,而无需知道具体的创建细节。这种模式在需要重复创建相似对象时非常有用,避免了每次创建新对象时都...
**原型模式(Prototype Pattern)详解** 在软件设计中,原型模式是一种创建型设计模式,它提供了一种通过复制已有对象来创建新对象的方式,避免了重复的构造过程,提高了代码的效率和可维护性。原型模式的核心思想...
本篇文章将深入探讨“原型模式(Prototype)”这一经典的设计模式,它是面向对象设计的一个重要概念,尤其在C++编程中有着广泛的应用。 原型模式是一种创建型设计模式,它的核心思想是通过复制已有对象来创建新对象,...
Java原型模式是一种设计模式,属于创建型模式,它允许我们通过复制现有的对象来创建新对象,而无需知道具体创建过程的细节。这种模式的核心在于Java中的`Cloneable`接口和`clone()`方法。 首先,我们要了解`...
4. **结构固定的对象**: 对于如配置对象等结构固定、修改少的对象,使用原型模式非常合适。 ### 注意事项 1. **clone()方法的异常处理**: `CloneNotSupportedException` 是clone()方法的声明抛出的异常,通常需要...
**原型模式(Prototype)** 原型模式是一种创建型设计模式,它提供了一种通过复制已有对象来创建新对象的方式,而不是通过传统的构造函数。这种模式在系统中需要创建大量相似对象时特别有用,可以提高效率并减少内存...
**原型模式(Prototype)**是软件设计模式中的一种,它属于创建型模式,主要用于简化对象的创建过程,通过复制已有对象来生成新对象,避免了重复的构造过程,提高了代码的效率和可维护性。在Java、C#等面向对象语言...
原型模式(Prototype)是一种软件设计模式,主要用于简化创建对象的过程,尤其当对象的构造过程复杂时。在C#中,我们可以利用接口或者继承来实现这一模式。本案例将深入探讨如何在C#环境中运用原型模式。 首先,...