Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 如何使用具有正确含义的原型模式?_Oop_Design Patterns - Fatal编程技术网

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

Oop 如何使用具有正确含义的原型模式?,oop,design-patterns,Oop,Design Patterns,我试图理解原型设计模式 下面是示例代码 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();

我试图理解原型设计模式

下面是示例代码

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类型的超类的任何子类

我说得对吗?或者还有其他需要添加的内容吗?

此代码:

Dog d = new Dog();
Dog clone = d;
不创建对象的副本。您将从变量
d
clone
链接相同的对象。您可以通过向Dog类添加一些字段并在clone中为其赋值来检查这一点。然后检查d的值。应该是一样的

makeCopy
的正确实现应该调用一个
new
操作符,该操作符创建一个全新的对象,并用原型的数据填充它。

可能重复的