`
543089122
  • 浏览: 153155 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

简单_原型模式(Prototype)

阅读更多
原型模式说白了也就是克隆自身,为了解决某些复杂对象的创建工作而生的。

网上许多关于原型模式的文章东西倒是说了很多而且还扯到了工厂模式等一些其他的模式,
我个人认为那样真是啰嗦的要死不说还把问题搞负责了。

克隆分为浅克隆和深克隆,浅克隆紧紧克隆对象的基本数据类型的值,深克隆会连引用类型也克隆。JAVA中凡是实现了java.lang.Cloneable接口的类都具有克隆功能,而这样的克隆是浅克隆的,深克隆的原理是:通过把克隆对象序列化到内存然后再反序列化读出。

package design.prototype;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

/**
 * @author 作者 E-mail: jqsl2012@163.com
 * @version 创建时间:2012-1-12 下午10:55:57 <br>
 */
public class Person implements Cloneable, Serializable {
	public Map<String, String> map = new HashMap<String, String>();;

	@Override
	protected Object clone() throws CloneNotSupportedException {
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		ObjectOutputStream oos = null;
		ObjectInputStream ois = null;
		try {
			oos = new ObjectOutputStream(baos);
			oos.writeObject(this);

			ByteArrayInputStream bais = new ByteArrayInputStream(
					baos.toByteArray());
			ois = new ObjectInputStream(bais);
			return ois.readObject();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} finally {
			if (oos != null)
				try {
					oos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			if (ois != null)
				try {
					ois.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
		}
		return null;
	}
}



深克隆也叫做完整克隆,我想浅克隆那就应该称作部分克隆了吧。下面是HashMap的clone方法
/**
     * Returns a shallow copy of this <tt>HashMap</tt> instance: the keys and
     * values themselves are not cloned.
     *
     * @return a shallow copy of this map.
     */
    public Object clone() {
        HashMap<K,V> result = null;
	try { 
	    result = (HashMap<K,V>)super.clone();
	} catch (CloneNotSupportedException e) { 
	    // assert false;
	}
        result.table = new Entry[table.length];
        result.entrySet = null;
        result.modCount = 0;
        result.size = 0;
        result.init();
        result.putAllForCreate(this);

        return result;
    }
0
1
分享到:
评论

相关推荐

    设计模式_创建型_原型模式.md

    原型模式的类图通常展示了一个抽象原型类(Prototype),它包含克隆方法(Clone),以及一个或多个具体原型类(ConcretePrototype),它们继承了抽象原型类并实现了克隆方法。 **示例代码:** 在给出的Java代码中,...

    设计模式_原型模式

    下面是一个简单的C++原型模式示例: ```cpp // 原型接口 class Prototype { public: virtual ~Prototype() {} virtual Prototype* clone() const = 0; // 抽象方法,用于创建对象的副本 }; // 具体原型类 class ...

    yuanxingmoshi.rar_java yuanxingmoshi_原型模式

    在Java编程语言中,原型模式(Prototype Pattern)是一种创建型设计模式,它的主要思想是通过复制已有对象来创建新对象,而不是通过构造函数。原型模式适用于当创建新对象的代价较大,或者对象的创建需要大量复杂的...

    MI_Style_Multitask_Prototype,一个原型简单地解释了如何使小米式的多任务交互.zip

    作为一个开源项目,“MI_Style_Multitask_Prototype”鼓励社区成员参与改进和创新,让更多的开发者和设计师能够学习并应用这种设计模式。通过开源,我们可以看到小米如何将用户体验和效率结合,从而提升整个系统的...

    原型设计模式prototype

    在面向对象编程中,当我们需要频繁地创建具有相同或相似属性的对象时,原型模式可以极大地提高效率。 ### 模式原理 在原型模式中,一个类定义了创建新对象的接口,而其实现由它的子类完成。这个接口通常只有一个...

    设计模式 创建型模式 Prototype模式(原型)

    即原型模式,提供一个已经存在的对象进行新对象创建的接口,一般情况下都是使用Clone接口。 此模式非常简单,简单的说就是复制多个当前对象供使用。Prototype模式允许一个对象再创建另外一个可定制的对象,根本...

    原型模式 Prototype Pattern

    ### 原型模式 Prototype Pattern #### 概述 原型模式是一种创建型设计模式,它允许用户通过复制现有的实例来创建新的对象,而不是通过传统的构造器来创建对象。这种模式适用于那些创建对象的成本较高,或者当对象...

    原型模式(Prototype)

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

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

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

    [创建型模式]设计模之原型模式(Prototype Pattern)

    **原型模式(Prototype Pattern)**是一种创建型设计模式,它允许我们通过复制现有的对象来创建新对象,而不是通过构造函数或工厂方法。这种模式的核心在于,它提供了一种更高效、更灵活的方式来创建新实例,特别是在...

    Borrm.Designer_C语言_prototype_

    总结来说,"Borrm.Designer_C语言_prototype_"这个项目可能是为了实现一个高效的运动检测系统,利用C语言的高效性和C#的便利性,通过"Prototype mode"快速迭代和优化,以达到最快的运动检测效果。在这个过程中,...

    通过python实现原型模式(Prototype Pattern).rar

    原型模式(Prototype Pattern)是一种创建型设计模式,它通过复制现有对象来创建新的对象,而不是通过传统的构造函数或类来实例化对象。原型模式在需要创建大量相似对象且创建过程较为耗时或复杂时非常有用。 在...

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

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

    设计模式之Prototype(原型)

    在"TestPrototype"这个压缩包中的文件可能是用来测试原型模式的一个实例。它可能包含了一个或多个实现了Prototype接口的类,以及一个测试类用于演示如何使用这些原型对象进行复制。测试类可能会创建一个原型对象,对...

    原型模式PPT文档

    1. **模式结构**:原型模式主要由两个角色构成——原型(Prototype)接口和具体原型(Concrete Prototype)。原型接口定义了克隆操作,而具体原型实现该接口,提供实际的克隆功能。 2. **工作原理**:首先,客户端...

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

    在Python中,实现原型模式相对简单,因为Python提供了内置的`copy`模块,可以方便地实现浅复制和深复制。在`Prototype.py`文件中,我们可能会看到以下代码结构: ```python class Prototype: def __init__(self, ...

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

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

    iOS设计模式之原型模式

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

    android设计模式之原型模式

    在"prototype"压缩包中,我们可以看到一个简单的原型模式实现。首先,定义一个抽象的原型类(Prototype): ```java public abstract class Prototype implements Cloneable { public abstract Prototype clone() ...

    IOS设计模式浅析之原型模式(Prototype)--copy - iOS知识库1

    iOS中的原型模式(Prototype)是一种设计模式,它允许我们通过复制已有对象来创建新的对象,而无需知道具体的创建过程。这种模式在某些情况下能够提高代码的可复用性和效率,特别是当创建新对象的步骤复杂时。 原型...

Global site tag (gtag.js) - Google Analytics