设计模式 -原型模式 (Prototype)

一、基本介绍

  • 原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象
  • 原型模式是一个创建型设计模式,允许一个对象再创建另外一个可定制的对象,不需要知道创建的细节
  • 工作原理:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来进行创建,对象.clone()

二、注意事项

  1. 浅拷贝

    浅拷贝 只对 基本数据类型其真正的拷贝作用,对于引用类型来说的话,只是简单的对引用类型地址进行了拷贝,即使进行了多次的浅拷贝,多个对象中地引用类型还是指的同一个

  2. 深拷贝

    深拷贝用来解决浅拷贝问题

    深拷贝实现方式:

    • 方式一:重写 clone 方法进行实现深拷贝

       super.clone()
      
    • 方式二:通过对象序列化进行深拷贝推荐使用

      public Object deepClone() {
              ByteArrayOutputStream byteArrayOutputStream = null;
              ObjectOutputStream objectOutputStream = null;
              ByteArrayInputStream byteArrayInputStream = null;
              ObjectInputStream objectInputStream = null;
      
              try {
                  byteArrayOutputStream = new ByteArrayOutputStream();
                  objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
      
                  objectOutputStream.writeObject(this);
      
      
                  byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
                  objectInputStream = new ObjectInputStream(byteArrayInputStream);
      
                  SpringDemo springDemo = (SpringDemo) objectInputStream.readObject();
                  return springDemo;
              } catch (IOException e) {
                  e.printStackTrace();
              } catch (ClassNotFoundException e) {
                  e.printStackTrace();
              }finally {
                  try {
                      byteArrayInputStream.close();
                      byteArrayInputStream.close();
                      objectOutputStream.close();
                      byteArrayInputStream.close();
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }
              return null;
          }