学习前提
- 深克隆(shadow clone)
- 浅克隆(deep clone)
- 序列化(serialization)
原型模式
- 原型模式:使用原型实例指定创建对象的种类,并且通过克隆这些原型创建新的对象。
- 序列化:将对象写到流的过程,写到流中的对象是原有对象的一个复制品,而原有对象仍然存在于内存中。通过序列化实现的复制不仅可以复制对象本身,而且可以复制其引用的成员对象,因此通过序列化将对象写到一个流中,再从流里将其读出来,可以实现深克隆(需要实现Serializable 接口)。
class Object implements Serializable {
...
public Object deepclone() throw IOException, ClassNotFoundException, OptionalDataException {
ByteArrayOutputStream bao = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bao);
oos.writeObject(this);
ByteArrayInputStream bis = new ByteArrayInputStream();
ObjectInputStream ois = new ObjectInputStream(bis);
return (obejct)ois.readObject();
}
}
原型模式结构
原型管理器
- 原型管理器是将多个原型对象存储在一个集合中供客户端使用,它是一个专门负责克隆对象的工厂,其中定义了一个集合用于存储原型对象,如果需要某个原型对象的一个克隆,可以通过复制集合中对象的原型对象来获取。