如何使用具有正确含义的原型模式?

时间:2016-03-09 15:11:12

标签: oop design-patterns

我正在尝试了解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类型的超类的任何子类。

我说错了吗?或者还有什么需要添加到这个?

1 个答案:

答案 0 :(得分:0)

此代码:

Dog d = new Dog();
Dog clone = d;

不会创建对象的副本。您将从变量dclone链接相同的对象。您可以通过向Dog类添加一些字段并在克隆中分配它的值来检查。之后检查d的值。应该是一样的。

makeCopy的正确实施应该调用new运算符,该运算符会创建一个全新的对象并使用原型数据填充它。