美文网首页
设计模式-prototype模式

设计模式-prototype模式

作者: Wu杰语 | 来源:发表于2020-11-28 23:20 被阅读0次

    当需要从内存中构造新的对象时,可以使用原型模式。

    例子

    原型模式构造有浅拷贝和深拷贝两种方式

     // 浅拷贝
    class Book {
      private String name;
      private String value;
      public Book() {
      }
    }
    
    class Data {
      private int count;
      private Map<String, Book> contents;
      public Data() {
          ...
      }
    
      public clone() {
        Data data = new Data();
        data.count = count;
        data.contents = contents.clone();
      }
    }
    
    

    这里调用Data的clone方法,其中对于Hash的拷贝是浅拷贝,内容只想相同的Book,当Book内容修改时,克隆对象也会一并修改。

     // 浅拷贝
    class Book {
      private String name;
      private String value;
      public Book() {
      }
      public Book clone() {
        Book book = new Book();
        book .name = name;
        book.value = value;
        return book;
      }
    }
    
    class Data {
      private int count;
      private Map<String, Book> contents;
      public Data() {
          ...
      }
    
      public clone() {
        Data data = new Data();
        data.count = count;
        for (Map::Entry<String, Book> entry : contents.entrySet()) {
          data.contents.put(entry.first, entry.second.clone());
        }
      }
    }
    

    这里是深拷贝,深拷贝后两个对象就没有任何关系了。

    小结

    一般而言,如果要进行对象拷贝,我们使用的是深拷贝,但是有时为了效率,会专门设计浅拷贝,只在变更处进行深拷贝。

    相关文章

      网友评论

          本文标题:设计模式-prototype模式

          本文链接:https://www.haomeiwen.com/subject/srhhwktx.html