设计模式-原型模式
一、原型模式的理解
当对象的创建比较复杂时,考虑使用原型模式将对象拷贝一份,拷贝分为深度拷贝和浅拷贝,所谓拷贝就是将对象的属性拷贝的另一个对象中去,对于对象中的基本数据类型拷贝时为值传递,拷贝时直接将值拷贝过去,修改一个原型对象不会影响到拷贝对象,但是如果对象中的属性为引用类型时(数组或对象),浅拷贝只是将该成员变量的引用值拷贝一份给新的对象,因为两个对象的该成员变量都指向一个实例,所以只要一个发生变化,另一个也跟着变化。浅拷贝有两种方式实现,
第一,构造方法赋值;
第二、克隆的方式
@Override protected Product clone() throws CloneNotSupportedException { /*ByteArrayOutputStream bos=new ByteArrayOutputStream(); ObjectOutputStream oos=null; try { oos=new ObjectOutputStream(bos); oos.writeObject(this); ByteArrayInputStream bis=new ByteArrayInputStream(bos.toByteArray()); ObjectInputStream ois=new ObjectInputStream(bis); return (Product)ois.readObject(); } catch (IOException e) { e.printStackTrace(); }catch (ClassNotFoundException e) { e.printStackTrace(); }*/ Product clone=(Product)super.clone(); BaseInfo info=this.baseInfo.clone(); clone.setBaseInfo(info); //return (Product)super.clone(); return clone; } //测试类 public class Test { public static void main(String[] args) throws CloneNotSupportedException { BaseInfo info=new BaseInfo(); info.setInfo("uuu"); Product product=new Product("ser",1,2,info); Product clone=product.clone(); product.getBaseInfo().setInfo("yyy"); System.out.println(product); System.out.println(clone); } }
三、总结
原型模式使用场景:
1.对象创建复杂时,内部需要资源的复杂计算以及其他对象的数据准备时,需要用到原型模式;
2.或对像备份时;
3.当需要一个对象的大量公共信息,少量属性需要个性化定制时,需要使用到原型模式