zoukankan      html  css  js  c++  java
  • 设计模式-原型模式

    一、原型模式的理解

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

    第一,构造方法赋值;

    第二、克隆的方式

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

  • 相关阅读:
    5G NR系列(四)物理下行共享信道(PDSCH)物理层过程详解
    5G NR系列(三)PDSCH的解调参考信号(DM-RS)
    Mac上重装pycharm打不开的解决方法
    Oracle parallel理解
    V$ASM_DISKGROUP视图信息解读
    深入了解 Oracle Flex ASM 及其优点
    使用typora和印象笔记高效输出
    Centos7.6部署k8s 集群
    DBA日常职责
    利用DCLI命令实现跨机器检查
  • 原文地址:https://www.cnblogs.com/lufei33180/p/13374760.html
Copyright © 2011-2022 走看看