设计模式-原型模式

一、原型模式的理解

当对象的创建比较复杂时,考虑使用原型模式将对象拷贝一份,拷贝分为深度拷贝和浅拷贝,所谓拷贝就是将对象的属性拷贝的另一个对象中去,对于对象中的基本数据类型拷贝时为值传递,拷贝时直接将值拷贝过去,修改一个原型对象不会影响到拷贝对象,但是如果对象中的属性为引用类型时(数组或对象),浅拷贝只是将该成员变量的引用值拷贝一份给新的对象,因为两个对象的该成员变量都指向一个实例,所以只要一个发生变化,另一个也跟着变化。浅拷贝有两种方式实现,

第一,构造方法赋值;

第二、克隆的方式

 @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.当需要一个对象的大量公共信息,少量属性需要个性化定制时,需要使用到原型模式

原文地址:https://www.cnblogs.com/lufei33180/p/13374760.html