原型模式(prototype):
通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式.
就是java中的克隆技术,以某个对象为原型,复制出新的对象.显然,新的对象具备原型对象的特点
优势:效率高(直接克隆,避免了重新执行构造过程步骤)
克隆类似于new,但是不同于new.new创建新的对象属性采用的是默认值.克隆出的对象属性值完全和原型对象相同.并且克隆出的新对象改变不会影响原型对象.然后,再修改克隆对象的值.
实现:
Cloneable接口和clone方法
Prototype模式中实现起来最困难的地方是内存复制操作.java中提供了clone方法.
//使用序列化和反序列化实现深复制
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(s1);
byte[] bytes = bos.toByteArray();
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bis);
Sheep s2 = (Sheep)ois.readObject();
使用场景:
new一个对象繁琐,需要时间较长时.可以使用原型模式进行拷贝