今天主要说说原型模式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里的克隆代码理解prototype(原型)问题总结优缺点模型优点模型缺点 概念 原型模式是创建型模式的最后一种,讲到原型模式就不得不提到...
C#设计模式(23种设计模式) 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器...
java23种设计模式 工厂模式 ,抽象工厂,建造者模式,单态模式,原型模式
对象的克隆——原型模式,复杂对象的组装与创建——建造者模式,不兼容结构的协调——适配器模式,处理多维度变化——桥接模式,树形结构的处理——组合模式,扩展系统功能——装饰模式,深入浅出外观模式,实现对象...
书名: 设计模式可复用面向对象软件的基础 英文原书名: Design Patterns:Elements of Reusable Object-Oriented software 作者: Erich Gamma 等 译者: 李英军 马晓星 蔡敏 刘建中 书号: 7-111-07575-7 页码: 254 定价...
设计模式——原型模式 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 原型模式是用场景:需要大量的基于某个基础原型进行微量修改而得到新原型时使用 """ fro
目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式
(三) 确保对象的唯一性——单例模式 (四) 确保对象的唯一性——单例模式 (五) 原型模式-Prototype Pattern 对象的克隆——原型模式(一) 对象的克隆——原型模式(二) 对象的克隆——原型模式(三) ...
第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 设计问题...
总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...
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++设计模式原理与实战视频...2-12 原型模式的实用工程技术——DRY原则与使用模式进行重构 3-1 适配器模式的定义、场景与实用工程技术:对象适配与类的适配 3-2 门面(外观)模式Facade的定义、场景与实用工程技术:LOD
java 设计模式——原型模式 克隆羊问题介绍原型模式原理,深入浅出易于理解
总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...
综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...
原始模型模式: 原始模型模式 通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原 型对象的方法创建出更多同类型的对象。 原始模型模式允许动态的增加或减少产品类, 产品 类不需要非得有任何事先...