我正在尝试了解Prototype desgining模式。
以下是示例代码。
public class App {
public static void main(String[] args) {
//Prototype proto = new Prototype();
Dog d = new Dog();
Dog clone ;//= (Dog)proto.getClone(d);
clone = (Dog) d.makeCopy();
System.out.println(d);
System.out.println(clone);
System.out.println("xxxxxxxxxxxxxx");
//System.out.println();
//d.setval("test");
//System.out.println(clone.getVal());
}
}
很明显如何在原型中创建狗的克隆。
Dog d = new Dog();
Dog clone ;
clone = (Dog) d.makeCopy();
但是,如果不做所有这些步骤,我们不能这样做吗?
Dog d = new Dog();
Dog clone = d;
我能想到的唯一用法是通过Prototype动态创建克隆对象,因为我们可以传递Dog类型的超类的任何子类。
我说错了吗?或者还有什么需要添加到这个?
答案 0 :(得分:0)
此代码:
Dog d = new Dog();
Dog clone = d;
不会创建对象的副本。您将从变量d
和clone
链接相同的对象。您可以通过向Dog类添加一些字段并在克隆中分配它的值来检查。之后检查d的值。应该是一样的。
makeCopy
的正确实施应该调用new
运算符,该运算符会创建一个全新的对象并使用原型数据填充它。