原型模式是一种创建型模式,它使用原型实例指定待创建对象的类型,并通过拷贝这个原型来创建新的对象。
主要类或接口:
Prototype:接口或者抽象类,定义了克隆自身的接口,声明克隆方法。
ConcretePrototype:具体原型,实现了原型接口中的方法,负责创建自己的克隆对象。
demo:
interface Prototype {
Prototype clone();
}
class ConcretePrototypeA implements Prototype {
private String id;
public ConcretePrototypeA(String id) {
this.id = id;
}
@Override
public Prototype clone() {
try {
return (Prototype) super.clone();
} catch (CloneNotSupportedException e) {
throw new AssertionError();
}
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Override
public String toString() {
return "ConcretePrototypeA{" +
"id='" + id + '\'' +
'}';
}
}
public class PrototypeTest{
public static void main(String[] args) {
ConcretePrototypeA original = new ConcretePrototypeA("001");
System.out.println("Original: " + original);
try {
Prototype cloned = original.clone();
System.out.println("Cloned: " + cloned);
} catch (Exception e) {
e.printStackTrace();
}
}
}
深拷贝和浅拷贝:
浅拷贝是指创建一个新对象,这个新对象的属性与原对象的属性相同,但对于引用类型的属性(如数组、对象等),新对象的属性仍然指向原对象的引用类型属性的内存地址。
深拷贝则是创建一个新对象,并且递归地复制原对象的所有属性,包括引用类型的属性。对于引用类型的属性,深拷贝会创建这些属性的新实例,使得新对象与原对象在内容上完全相等,但在内存中是完全独立的。