5 原型模式(Prototype)
来源:互联网 发布:著名时装插画师知乎 编辑:程序博客网 时间:2024/06/05 01:16
原型模式是创建型的模式,思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。在Java中,复制对象是通过clone()实现的,先创建一个原型类
/** * 原型类 * * @author liubo */public class Prototype implements Cloneable { @Override protected Object clone() throws CloneNotSupportedException { Prototype proto = (Prototype) super.clone(); return proto; }}
一个原型类,只需要实现Cloneable接口,覆写clone方法,此处clone方法可以改成任意的名称,因为Cloneable接口是个空接口,你可以任意定义实现类的方法名,如cloneA或者cloneB,因为此处的重点是super.clone()这句话,super.clone()调用的是Object的clone()方法,而在Object类中,clone()是native的
浅复制:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。
深复制:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底。
/** * 完整的原型模式,浅复制,深复制 */package com.liubo.patterns.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;/** * 原型类 * * @author liubo */public class Prototype implements Cloneable, Serializable { private String string; private SerializableObject obj; /* 浅复制 */ @Override protected Object clone() throws CloneNotSupportedException { Prototype proto = (Prototype) super.clone(); return proto; } /* 深复制 */ 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; }}
要实现深复制,需要采用流的形式读入当前对象的二进制输入,再写出二进制数据对应的对象。
来自为知笔记(Wiz)
0 0
- 5 原型模式(Prototype)
- 5、原型模式(Prototype)
- (5)原型模式prototype
- (5)原型模式prototype
- 5、原型模式(Prototype)
- 5、原型模式(Prototype)
- 设计模式(5)-原型模式(Prototype)
- 原型模式(Prototype)
- 原型模式(prototype)
- 原型(Prototype)模式
- 原型(ProtoType)模式
- 原型模式(Prototype)
- 原型模式(Prototype)
- Prototype(原型模式)
- 原型(Prototype)模式
- Prototype(原型模式)
- PROTOTYPE(原型)模式
- 原型模式(ProtoType)
- 2 抽象工厂模式(Abstract Factory)
- 2 抽象工厂模式(Abstract Factory)
- C++模板
- 3 单例模式(Singleton)
- 4 建造者模式(Builder)
- 5 原型模式(Prototype)
- 关于android 不同版本获取wifi SSID,真的没话说了
- 6 适配器模式(Adapter)
- bootstrap modal 弹窗
- 7 装饰模式(Decorator)
- JAVA笔记
- 8 代理模式(Proxy)
- 免费的编程中文书籍索引
- 9 外观模式(Facade)