`
twypx
  • 浏览: 14135 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

设计模式(三)——原型模式

 
阅读更多

今天主要说说原型模式prototype,原型模式最基本的理解就是复制一份对象实例,它也是一种创建型模式。一般情况是我们新建一个原型对象类,然后对该对象进行复制,重新修饰中就可以当作新对象使用了。这在处理比较复杂的对象时是非常高效的,因为使用的是已经存在实例化的对象。

一般采用原型模式的原型对象都需要实现Cloneable接口,实现方式就是使用clone()方法。

/**
 * 原型模式——浅复制
 * @author xiAoT
 *
 */
public class Prototype implements Cloneable {

	@Override
	protected Object clone() throws CloneNotSupportedException {
		return (Prototype)super.clone();
	}
	
}

 上面就是一种原型模式的浅复制。原型模式一般分为深复制和浅复制。

 

浅复制就是指复制一个对象时,如果对象的成员变量是基本数据类型,则复制一份该成员变量到新对象中;如果对象的成员变量是引用数据类型,则该成员变量不复制,而是新对象中该成员变量和旧对象的该成员变量指向同一个引用。

 

深复制与浅复制的主要区别在于,如果成员变量是引用数据类型,此时深复制也会复制一份该成员变量到新对象中,而不是指向旧的引用。

 

要进行深复制,就不是只重写clone方法这么简单,需要将原对象以二进制流的方式输入,然后再写出该二进制数据对应的对象。

 

/**
 * 原型模式——深复制;因为采用二进制流的方式,所以需要序列化
 * @author xiAoT
 *
 */
public class Prototype2 implements Cloneable, Serializable {
	private String str;
	private User user;//序列化的对象
	public String getStr() {
		return str;
	}
	public void setStr(String str) {
		this.str = str;
	}
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	/**
	 * 浅复制
	 */
	public Object clone(){
		try {
			return (Prototype2)super.clone();
		} catch (CloneNotSupportedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * 深复制
	 * @return
	 */
	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();
	}
}
 

何时使用原型模式呢?如果你创建复杂的或者耗时的对象时,可以使用原型模式,在这种情况下,复制一份存在实例回事程序运行更搞笑。

分享到:
评论

相关推荐

    设计模式——原型模式

    这个是http://blog.csdn.net/dawanganban/article/details/9900539博客中java设计模式的源代码。下载前请先看《设计模式——原型模式》一文。

    Java设计模式——原型模式

    Java设计模式——原型模式 原型模式Java设计模式——原型模式概念使用场景Java里的克隆代码理解prototype(原型)问题总结优缺点模型优点模型缺点 概念 ​ 原型模式是创建型模式的最后一种,讲到原型模式就不得不提到...

    设计模式代码——c#

    C#设计模式(23种设计模式) 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器...

    java23种设计模式——图解——附带源码

    java23种设计模式 工厂模式 ,抽象工厂,建造者模式,单态模式,原型模式

    Java设计模式 版本2

    对象的克隆——原型模式,复杂对象的组装与创建——建造者模式,不兼容结构的协调——适配器模式,处理多维度变化——桥接模式,树形结构的处理——组合模式,扩展系统功能——装饰模式,深入浅出外观模式,实现对象...

    设计模式可复用面向对象软件的基础.zip

    书名: 设计模式可复用面向对象软件的基础 英文原书名: Design Patterns:Elements of Reusable Object-Oriented software 作者: Erich Gamma 等 译者: 李英军 马晓星 蔡敏 刘建中 书号: 7-111-07575-7 页码: 254 定价...

    Python设计模式之原型模式实例详解

    设计模式——原型模式 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 原型模式是用场景:需要大量的基于某个基础原型进行微量修改而得到新原型时使用 """ fro

    java设计模式

    目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式

    design-pattern-java.pdf

    (三) 确保对象的唯一性——单例模式 (四) 确保对象的唯一性——单例模式 (五) 原型模式-Prototype Pattern 对象的克隆——原型模式(一) 对象的克隆——原型模式(二) 对象的克隆——原型模式(三) ...

    JavaScript模式中文[pdf] 百度云

     第7章 设计模式  单体模式  工厂模式  迭代器模式  装饰者模式  策略模式  外观模式  代理模式  中介者模式  观察者模式  小结  第8章 DOM和浏览器模式  关注分离  DOM脚本  事件  长期运行脚本  ...

    深入浅出设计模式(中文版)

    3.5PrototypePattern(原型模式) 70 3.5.1定义 70 3.5.2现实中的拷贝-粘贴 71 3.5.3C#实例——颜色管理器 72 3.5.4Java实例——简单ToolBar 74 3.5.5ShallowCopy与DeepCopy 76 3.5.6优势和缺陷 82 3.5.7应用...

    设计模式--可复用面向对象软件的基础

    1.2 Smalltalk MVC中的设计模式 1.3 描述设计模式 1.4 设计模式的编目 1.5 组织编目 1.6 设计模式怎样解决设计问题 1.7 怎样选择设计模式 1.8 怎样使用设计模式 第二章 实例研究:设计一个文档编辑器 2.1 设计问题...

    24种设计模式介绍与6大设计原则

    总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...

    深入浅出设计模式(中文版电子版)

    3.5PrototypePattern(原型模式) 70 3.5.1定义 70 3.5.2现实中的拷贝-粘贴 71 3.5.3C#实例——颜色管理器 72 3.5.4Java实例——简单ToolBar 74 3.5.5ShallowCopy与DeepCopy 76 3.5.6优势和缺陷 82 3.5.7应用...

    毕业设计项目——智能家居原型开发

    3、完成毕业设计,积累项目经验,为找工作打基础。 ###应用场合: 1、夏日炎炎,在外工作一天,准备回家时,通过手机,提前将家里的空调启动,一回到家就能享受惬意的清凉。 2、在公司上班,亲友想用自己车库里的车...

    C++设计模式原理与实战视频课

    C++设计模式原理与实战视频...2-12 原型模式的实用工程技术——DRY原则与使用模式进行重构 3-1 适配器模式的定义、场景与实用工程技术:对象适配与类的适配 3-2 门面(外观)模式Facade的定义、场景与实用工程技术:LOD

    prototype.rar

    java 设计模式——原型模式 克隆羊问题介绍原型模式原理,深入浅出易于理解

    设计模式Demo

    总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷6

    综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...

    C#23种设计模式_示例源代码及PDF

    原始模型模式: 原始模型模式 通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原 型对象的方法创建出更多同类型的对象。 原始模型模式允许动态的增加或减少产品类, 产品 类不需要非得有任何事先...

Global site tag (gtag.js) - Google Analytics