设计模式-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());
}
}
}
这里是深拷贝,深拷贝后两个对象就没有任何关系了。
小结
一般而言,如果要进行对象拷贝,我们使用的是深拷贝,但是有时为了效率,会专门设计浅拷贝,只在变更处进行深拷贝。