今天主要说说原型模式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();
}
}
何时使用原型模式呢?如果你创建复杂的或者耗时的对象时,可以使用原型模式,在这种情况下,复制一份存在实例回事程序运行更搞笑。
分享到:
相关推荐
原型模式(Prototype Pattern)是一种创建型设计模式,它允许我们通过复制现有的对象来创建新对象,而无需知道具体创建过程的细节。这种模式的核心在于,它提供了一种对象克隆的简便方法,使得对象的创建过程对用户...
Java设计模式——原型模式 原型模式Java设计模式——原型模式概念使用场景Java里的克隆代码理解prototype(原型)问题总结优缺点模型优点模型缺点 概念 原型模式是创建型模式的最后一种,讲到原型模式就不得不提到...
"设计模式之美——教你写出高质量代码"这个主题旨在帮助开发者更好地理解和应用设计模式,从而提升代码的质量和可维护性。设计模式不仅对面试有所帮助,也是职场发展中的必备技能,无论你使用哪种开发语言。 设计...
C#设计模式(23种设计模式) 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器...
《设计模式——GFour》是一本深受IT从业者喜爱的经典书籍,尤其在C++开发者中具有广泛影响力。设计模式是软件工程领域中的一种最佳实践,它总结了在特定情境下解决问题的常见方法,使得代码可读性更强,复用性更高,...
原型模式通过复制已有对象来创建新对象。 2. **结构型模式**:这些模式处理类和对象的组合及相互关系。比如,适配器模式允许两个不兼容的接口协同工作;桥接模式将抽象部分与实现部分分离,使它们可以独立变化;...
本文将深入探讨一种常见的设计模式——原型模式(Prototype Pattern),并结合具体的iOS应用场景进行解析。 原型模式是一种创建型设计模式,它的主要思想是通过复制已有对象来创建新对象,而不是通过构造函数来创建...
3. **深拷贝与浅拷贝**:原型模式中的拷贝分为两种类型——深拷贝和浅拷贝。深拷贝会创建原始对象的所有属性的新副本,包括引用类型。而浅拷贝只复制对象本身,不复制引用的对象。 ### 实现原型模式的步骤 1. 定义...
### 设计模式与泡MM——设计模式入门教程 #### 一、创建型模式 ##### 1、FACTORY(工厂模式) 工厂模式的核心在于定义了一个创建对象的接口,但允许子类决定实例化哪一个类。工厂模式让类的实例化延迟到子类中...
本资料“《java设计模式》课后习题模拟试题解答——刘伟.zip”主要涵盖了Java设计模式的学习与应用,特别是针对刘伟教授的相关课程的课后习题及模拟试题的解答。 设计模式分为三大类:创建型、结构型和行为型模式。...
接下来,我们将分别介绍这三类设计模式中的典型例子及其应用场景。 ### 创建型模式 创建型模式主要关注对象的创建机制,使得系统在不明确指定具体类的情况下创建出需要的对象。 - **工厂方法模式**:提供一个创建...
- 原型模式(Prototype):通过复制已有对象来创建新对象。 - 工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。 - 抽象工厂模式(Abstract Factory):提供一个创建一...
书名: 设计模式可复用面向对象软件的基础 英文原书名: Design Patterns:Elements of Reusable Object-Oriented software 作者: Erich Gamma 等 译者: 李英军 马晓星 蔡敏 刘建中 书号: 7-111-07575-7 页码: 254 定价...
设计模式——原型模式 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 原型模式是用场景:需要大量的基于某个基础原型进行微量修改而得到新原型时使用 """ fro
《设计模式——可复用面向对象软件的基础》是IT领域中的经典著作,由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位大师合著,他们因此被誉为GoF(Gang of Four)。这本书提出了面向对象设计的23种...