设计模式-prototype模式

2020-11-28  本文已影响0人  Wu杰语

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

例子

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

 // 浅拷贝
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());
    }
  }
}

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

小结

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

上一篇下一篇

猜你喜欢

热点阅读