原型模式

 

原型模式:用原型实例指定要创建对象的实例,并通过拷贝哲学原型创建新的对象。

 

结构图:

 

一般在初始化的信息不发生变化的情况下,克隆是最好的办法。这既隐藏了对象创建的细节,又对性能是大大的提高(减少了new运算的大大的开销);

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace ConsoleApplication1
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             ConcreatePrototype p = new ConcreatePrototype("I");
14             ConcreatePrototype p2 = (ConcreatePrototype)p.Clone();
15             Console.WriteLine("Cloned: {0}", p2.Id);
16         }
17     }
18     abstract class Prototype
19     {
20         private string id;
21         public Prototype(string id)
22         {
23             this.id = id;
24         }
25         public string Id {
26             get { return id; }
27         }
28         public abstract Prototype Clone();
29     }
30     class ConcreatePrototype :Prototype
31     {
32         public ConcreatePrototype(string id):base(id)
33         {
34         }
35         public override Prototype Clone()
36         {
37             return (Prototype)this.MemberwiseClone();
38         }
39     }
40 }
View Code

克隆的操作是调用MemberwiseClone()方法,创建的是当前对象的浅表副本,方法是创建一个新对象,将当前对象的非静态字段复制到新对象。

如果字段是值类型的,则对该字段执行逐位复制,如果字段是引用类型的,则复制引用但不复制引用的对象;因此,原始对象及其副本引用的是同一对象。(也就是说引用的时候对象只有一份,多次修改后以最后一次为主),这时的操作叫做浅拷贝,即被复制对象的所有变量都含有雨原来的对象相同的值,而所有的对其他对象的引用都依然指向原来的对象

 

深复制把引用对象的变量指向复制过的新对象,而不是原有的被引用过的对象。

 

posted @ 2016-03-31 10:42  图哈特  阅读(454)  评论(0编辑  收藏  举报