`

4、原型模式

 
阅读更多

原型模式

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

    4 原型模式.txt

    原型模式实践代码

    原型模式是一种设计模式,主要应用于软件工程领域,用于创建重复的对象,而无需再次进行实例化。在Java、C#等面向对象的语言中,原型模式通过实现`Cloneable`接口或使用序列化机制来实现对象的复制。在这个"原型模式...

    原型模式PPT文档

    **原型模式** 原型模式是一种创建型设计模式,它允许我们创建对象的克隆,而无需知道具体的实现细节。在软件工程中,当我们需要创建多个相似的对象时,使用原型模式可以大大提高效率,避免了每次都去创建新的对象。...

    设计模式之原型模式Java实现和类设计图

    原型模式(Prototype Pattern)是其中一种行为设计模式,主要用于对象创建。它通过复制已有对象来创建新对象,而不是通过传统的构造函数来创建。在Java中,原型模式可以有效地提高性能,特别是在创建复杂对象时。 #...

    设计模式之原型模式

    **原型模式(Prototype Pattern)**是软件设计模式中的结构型模式之一,主要用来简化实例化过程,减少类的创建。在原型模式中,一个对象可以被用作创建其他新对象的模板,通过复制已有对象来创建新对象,而不是通过new...

    设计模式——原型模式

    原型模式(Prototype Pattern)是一种创建型设计模式,它允许我们通过复制现有的对象来创建新对象,而无需知道具体创建过程的细节。这种模式的核心在于,它提供了一种对象克隆的简便方法,使得对象的创建过程对用户...

    iOS设计模式之原型模式

    本文将深入探讨一种常见的设计模式——原型模式(Prototype Pattern),并结合具体的iOS应用场景进行解析。 原型模式是一种创建型设计模式,它的主要思想是通过复制已有对象来创建新对象,而不是通过构造函数来创建...

    设计模式的原型模式的例子

    原型模式(Prototype Pattern)是软件设计模式中的一种结构型模式,它的主要目的是通过复制已有对象来创建新对象,从而减少创建新对象的成本。在原型模式中,类的实例化过程被替换为对已有实例的克隆操作,尤其适用...

    实验六:原型模式.rar

    在这个实验六:“原型模式.rar”中,我们将深入理解并实践如何在Java中实现原型模式。 首先,原型模式的核心思想是通过拷贝已有对象来创建新对象,而不是从零开始创建。这种模式在处理复杂对象或者需要大量初始化...

    android设计模式之原型模式

    本文将深入探讨Android设计模式中的“原型模式”(Prototype Pattern),并结合提供的"prototype"压缩包中的示例代码进行解析。 原型模式是一种创建型设计模式,它的主要思想是通过复制已有对象来创建新对象,而...

    设计模式专题之(五)原型模式---设计模式原型模式示例代码(python--c++)

    原型模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在原型模式中,一个对象可以被克隆以创建新对象,而无需知道具体的创建细节。这种模式在需要重复创建相似对象时非常有用,避免了每次创建新对象时都...

    创建型模式之原型模式(Prototype Pattern)

    **原型模式(Prototype Pattern)详解** 在软件设计中,原型模式是一种创建型设计模式,它提供了一种通过复制已有对象来创建新对象的方式,避免了重复的构造过程,提高了代码的效率和可维护性。原型模式的核心思想...

    设计模式C++学习之原型模式(Prototype)

    本篇文章将深入探讨“原型模式(Prototype)”这一经典的设计模式,它是面向对象设计的一个重要概念,尤其在C++编程中有着广泛的应用。 原型模式是一种创建型设计模式,它的核心思想是通过复制已有对象来创建新对象,...

    java 原型模式

    Java原型模式是一种设计模式,属于创建型模式,它允许我们通过复制现有的对象来创建新对象,而无需知道具体创建过程的细节。这种模式的核心在于Java中的`Cloneable`接口和`clone()`方法。 首先,我们要了解`...

    Java原型模式

    4. **结构固定的对象**: 对于如配置对象等结构固定、修改少的对象,使用原型模式非常合适。 ### 注意事项 1. **clone()方法的异常处理**: `CloneNotSupportedException` 是clone()方法的声明抛出的异常,通常需要...

    原型模式(Prototype)

    **原型模式(Prototype)** 原型模式是一种创建型设计模式,它提供了一种通过复制已有对象来创建新对象的方式,而不是通过传统的构造函数。这种模式在系统中需要创建大量相似对象时特别有用,可以提高效率并减少内存...

    原型模式prototype

    **原型模式(Prototype)**是软件设计模式中的一种,它属于创建型模式,主要用于简化对象的创建过程,通过复制已有对象来生成新对象,避免了重复的构造过程,提高了代码的效率和可维护性。在Java、C#等面向对象语言...

    原型模式(ProtoType)C#应用案例

    原型模式(Prototype)是一种软件设计模式,主要用于简化创建对象的过程,尤其当对象的构造过程复杂时。在C#中,我们可以利用接口或者继承来实现这一模式。本案例将深入探讨如何在C#环境中运用原型模式。 首先,...

Global site tag (gtag.js) - Google Analytics