设计模式 - 原型模式

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

一、基本介绍

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

二、注意事项

  1. 浅拷贝

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

  2. 深拷贝

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

    深拷贝实现方式:

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

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

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      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;
      }