原型模式说白了也就是克隆自身,为了解决某些复杂对象的创建工作而生的。
网上许多关于原型模式的文章东西倒是说了很多而且还扯到了工厂模式等一些其他的模式,
我个人认为那样真是啰嗦的要死不说还把问题搞负责了。
克隆分为浅克隆和深克隆,浅克隆紧紧克隆对象的基本数据类型的值,深克隆会连引用类型也克隆。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;
}
分享到:
相关推荐
原型模式的类图通常展示了一个抽象原型类(Prototype),它包含克隆方法(Clone),以及一个或多个具体原型类(ConcretePrototype),它们继承了抽象原型类并实现了克隆方法。 **示例代码:** 在给出的Java代码中,...
下面是一个简单的C++原型模式示例: ```cpp // 原型接口 class Prototype { public: virtual ~Prototype() {} virtual Prototype* clone() const = 0; // 抽象方法,用于创建对象的副本 }; // 具体原型类 class ...
在Java编程语言中,原型模式(Prototype Pattern)是一种创建型设计模式,它的主要思想是通过复制已有对象来创建新对象,而不是通过构造函数。原型模式适用于当创建新对象的代价较大,或者对象的创建需要大量复杂的...
作为一个开源项目,“MI_Style_Multitask_Prototype”鼓励社区成员参与改进和创新,让更多的开发者和设计师能够学习并应用这种设计模式。通过开源,我们可以看到小米如何将用户体验和效率结合,从而提升整个系统的...
在面向对象编程中,当我们需要频繁地创建具有相同或相似属性的对象时,原型模式可以极大地提高效率。 ### 模式原理 在原型模式中,一个类定义了创建新对象的接口,而其实现由它的子类完成。这个接口通常只有一个...
即原型模式,提供一个已经存在的对象进行新对象创建的接口,一般情况下都是使用Clone接口。 此模式非常简单,简单的说就是复制多个当前对象供使用。Prototype模式允许一个对象再创建另外一个可定制的对象,根本...
### 原型模式 Prototype Pattern #### 概述 原型模式是一种创建型设计模式,它允许用户通过复制现有的实例来创建新的对象,而不是通过传统的构造器来创建对象。这种模式适用于那些创建对象的成本较高,或者当对象...
**原型模式(Prototype)** 原型模式是一种创建型设计模式,它提供了一种通过复制已有对象来创建新对象的方式,而不是通过传统的构造函数。这种模式在系统中需要创建大量相似对象时特别有用,可以提高效率并减少内存...
原型模式(Prototype)是一种软件设计模式,主要用于简化创建对象的过程,尤其当对象的构造过程复杂时。在C#中,我们可以利用接口或者继承来实现这一模式。本案例将深入探讨如何在C#环境中运用原型模式。 首先,...
**原型模式(Prototype Pattern)**是一种创建型设计模式,它允许我们通过复制现有的对象来创建新对象,而不是通过构造函数或工厂方法。这种模式的核心在于,它提供了一种更高效、更灵活的方式来创建新实例,特别是在...
总结来说,"Borrm.Designer_C语言_prototype_"这个项目可能是为了实现一个高效的运动检测系统,利用C语言的高效性和C#的便利性,通过"Prototype mode"快速迭代和优化,以达到最快的运动检测效果。在这个过程中,...
原型模式(Prototype Pattern)是一种创建型设计模式,它通过复制现有对象来创建新的对象,而不是通过传统的构造函数或类来实例化对象。原型模式在需要创建大量相似对象且创建过程较为耗时或复杂时非常有用。 在...
原型模式(Prototype Pattern)是其中一种行为设计模式,主要用于对象创建。它通过复制已有对象来创建新对象,而不是通过传统的构造函数来创建。在Java中,原型模式可以有效地提高性能,特别是在创建复杂对象时。 #...
在"TestPrototype"这个压缩包中的文件可能是用来测试原型模式的一个实例。它可能包含了一个或多个实现了Prototype接口的类,以及一个测试类用于演示如何使用这些原型对象进行复制。测试类可能会创建一个原型对象,对...
1. **模式结构**:原型模式主要由两个角色构成——原型(Prototype)接口和具体原型(Concrete Prototype)。原型接口定义了克隆操作,而具体原型实现该接口,提供实际的克隆功能。 2. **工作原理**:首先,客户端...
在Python中,实现原型模式相对简单,因为Python提供了内置的`copy`模块,可以方便地实现浅复制和深复制。在`Prototype.py`文件中,我们可能会看到以下代码结构: ```python class Prototype: def __init__(self, ...
原型模式(Prototype Pattern)是软件设计模式中的一种结构型模式,它的主要目的是通过复制已有对象来创建新对象,从而减少创建新对象的成本。在原型模式中,类的实例化过程被替换为对已有实例的克隆操作,尤其适用...
本文将深入探讨一种常见的设计模式——原型模式(Prototype Pattern),并结合具体的iOS应用场景进行解析。 原型模式是一种创建型设计模式,它的主要思想是通过复制已有对象来创建新对象,而不是通过构造函数来创建...
在"prototype"压缩包中,我们可以看到一个简单的原型模式实现。首先,定义一个抽象的原型类(Prototype): ```java public abstract class Prototype implements Cloneable { public abstract Prototype clone() ...
iOS中的原型模式(Prototype)是一种设计模式,它允许我们通过复制已有对象来创建新的对象,而无需知道具体的创建过程。这种模式在某些情况下能够提高代码的可复用性和效率,特别是当创建新对象的步骤复杂时。 原型...