为什么我需要使用原型设计模式?取而代之的是,我可以直接为该值赋值吗?例如
按照原型设计模式,我们必须像这样克隆:
Typist typistCopy = (Typist)typist.Clone();
我可以这样做:
Typist typistCopy = typist;
这里的原型设计模式有什么重要性?
答案 0 :(得分:2)
您演示的两个操作具有不同的作用。您需要哪一个取决于您要做什么。
此不会创建对象的副本/克隆:
Typist typistCopy = typist;
它所做的一切都会创建一个新的变量,该变量引用内存中的相同对象。执行该行代码后,您仍然只有一个 Typist
对象。您只有两个引用它的变量。对一个变量所做的任何更改都会反映在这两个变量中,因为它们都引用同一对象。
另一方面,这会创建对象的副本或克隆:
Typist typistCopy = (Typist)typist.Clone();
(或者至少允许对象本身决定是否需要复制/克隆,并执行其自身的封装逻辑,以表示对对象的含义。)
执行完这一行代码后,您现在拥有两个 Typist
对象,它们可以彼此独立地使用和操作。对一个变量所做的任何更改都不会反映在另一个变量中,因为它们引用了不同的对象。
答案 1 :(得分:0)
添加真实世界的比喻:
Page paper = (Page)yourPaper.Clone();
这将创建一个副本。现在有两页纸,您有正本,有人交给了副本。
Page paper = yourPaper;
未复制。您有一纸纸,其他人也抓住了它。现在你们都握住那一页纸。
您需要决定想要什么。