可复用面向对象软件基础——设计模式(六)之原型模式
2016-12-15 21:06
731 查看
一、原型模式(Prototype)
原型模式虽然是创建型的模式,但是与工程模式没有关系,从名字即可看出,该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。/** * 原型类,实现可复制接口 * @author barnett * */ public class Prototype implements Cloneable { /** * 复制方法,调用父类的复制方法 */ public Object clone() throws CloneNotSupportedException { Prototype prototype = (Prototype) super.clone(); return prototype; } }
很简单,一个原型类,只需要实现Cloneable接口,覆写clone方法,此处clone方法可以改成任意的名称,因为Cloneable接口是个空接口,你可以任意定义实现类的方法名,如cloneA或者cloneB。
因为此处的重点是super.clone()这句话,super.clone()调用的是Object的clone()方法,而在Object类中,clone()是native的。
二、深浅复制
浅复制:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。深复制:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底。
public class PrototypeDeepAndThinClone implements Cloneable, Serializable { private static final long serialVersionUID = 1L; private String string; private SerializableObject obj; // 浅复制 public Object clone() throws CloneNotSupportedException { Prototype prototype = (Prototype) super.clone(); return prototype; } // 深复制 public Object deepClone() throws IOException, ClassNotFoundException { // 写入当前对象的二进制流 ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(this); // 读出二进制流产生的新对象 ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bis); return ois.readObject(); } public String getString() { return string; } public void setString(String string) { this.string = string; } public SerializableObject getObj() { return obj; } public void setObj(SerializableObject obj) { this.obj = obj; } } class SerializableObject implements Serializable { private static final long serialVersionUID = 1L; }
要实现深复制,需要采用流的形式读入当前对象的二进制输入,再写出二进制数据对应的对象。
相关文章推荐
- 设计模式(Design Patterns)-可复用面向对象软件的基础 05:原型模式(Prototype)和Java中的深、浅拷贝
- 可复用面向对象软件基础——设计模式(一)之总览
- 设计模式(Design Patterns——可复用面向对象软件的基础
- 可复用面向对象软件基础——设计模式(五)之建造者模式
- 设计模式 可复用面向对象软件的基础(概念你认识多少)
- 第一章 引言--《设计模式-可复用面向对象软件的基础》Erich Gamma
- 迭代器模式--《设计模式-可复用面向对象软件的基础》Erich Gamma
- 设计模式(Design Patterns)-可复用面向对象软件的基础 02:工厂方法模式(Factory Method)和抽象工厂模式(Abstract Factory)
- 设计模式(Design Patterns)-可复用面向对象软件的基础 06:适配器模式(Adapter)
- 设计模式-可复用面向对象软件的基础 [读书笔记]
- 设计模式_可复用面向对象软件的基础- 观后感
- 设计模式--可复用面向对象软件的基础(双语版)(十五周年·限量纪念版)
- 设计模式(Design Patterns)-可复用面向对象软件的基础 07:装饰模式(Decorator)
- Design Patterns(设计模式 可复用面向对象软件的基础)
- 设计模式(Design Patterns)-可复用面向对象软件的基础 08:外观模式(Facade)
- 可复用面向对象软件基础——设计模式(三)之抽象工厂模式
- 第二章 实例研究:设计一个文档编辑器--《设计模式-可复用面向对象软件的基础》Erich Gamma
- 学习:设计模式 可复用面向对象软件的基础 【引言】
- 设计模式(Design Patterns)-可复用面向对象软件的基础 04:建造者模式(Builder)
- 可复用面向对象软件基础——设计模式(四)之单例模式