原型模式(Prototype Pattern)

原型模式(Prototype Pattern

概述

原型模式的用意是:通过给出一个原型对象来指明所要创建的对象类型,然后用复制这个原型对象的办法创建出更多的同类型对象。

结构图

<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 388.5pt; HEIGHT: 181.5pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/images/cnblogs_com/terrylee/PIC076.jpg" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image001.jpg"></imagedata></shape>

Prototype模式结构图

客户(Client)角色:客户类提出创建对象的请求。
抽象原型(Prototype)角色:这是一个抽象角色,通常由一个C#接口或抽象类实现。此角色给出所有的具体原型类所需的接口。在C#中,抽象原型角色通常实现了ICloneable接口。
具体原型(Concrete Prototype)角色:被复制的对象。此角色需要实现抽象原型角色所要求的接口。

原理

C#里面,我们可以很容易的通过Clone()方法实现原型模式。任何类,只要想支持克隆,必须实现C#中的ICloneable接口。ICloneable接口中有一Clone方法,可以在类中复写实现自定义的克隆方法。克隆的实现方法有两种:浅拷贝(shallow copy)与深拷贝(deep copy)。浅拷贝是指当对象的字段值被拷贝时,字段引用的对象不会被拷贝。例如,如果一个对象有一个指向字符串的字段,并且我们对该对象做了一个浅拷贝,那么两个对象将引用同一个字符串。而深拷贝是对对象实例中字段引用的对象也进行拷贝的一种方式,所以如果一个对象有一个指向字符串的字段,并且我们对该对象做了一个深拷贝的话,我们将创建一个新的对象和一个新的字符串--新对象将引用新字符串。需要注意的是执行深拷贝后,原来的对象和新创建的对象不会共享任何东西;改变一个对象对另外一个对象没有任何影响。

生活中的例子

Prototype模式使用原型实例指定创建对象的种类。新产品的原型通常是先于全部产品建立的,这样的原型是被动的,并不参与复制它自己。一个细胞的有丝分裂,产生两个同样的细胞,是一个扮演主动角色复制自己原型的例子,这演示了原型模式。一个细胞分裂,产生两个同样基因型的细胞。换句话说,细胞克隆了自己。

<shape id="_x0000_i1026" style="WIDTH: 264pt; HEIGHT: 164.25pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/images/cnblogs_com/terrylee/PIC075.jpg" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image002.jpg"></imagedata></shape>

使用细胞分裂例子的Prototype模式对象图

原型模式实例

原型实例:

<shape id="_x0000_i1027" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>//Prototypepattern--Structuralexample
<shape id="_x0000_i1028" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>usingSystem;
<shape id="_x0000_i1029" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>
<shape id="_x0000_i1030" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>
//"Prototype"
<shape id="_x0000_i1031" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>abstractclassPrototype
<shape id="Codehighlighter1_100_313_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1032"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image004.gif"></imagedata></shape><shape id="Codehighlighter1_100_313_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1033"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image005.gif"></imagedata></shape>
<shape id="_x0000_i1034" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image006.gif"></imagedata></shape>{
<shape id="_x0000_i1035" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>
//Fields
<shape id="_x0000_i1036" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>privatestringid;
<shape id="_x0000_i1037" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>
<shape id="_x0000_i1038" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>
//Constructors
<shape id="_x0000_i1039" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>publicPrototype(stringid)
<shape id="Codehighlighter1_188_210_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1040"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image008.gif"></imagedata></shape><shape id="Codehighlighter1_188_210_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1041"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image009.gif"></imagedata></shape>
<shape id="_x0000_i1042" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><font color="#000000"> <imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image006.gif"></imagedata></font></shape>{
<shape id="_x0000_i1043" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>
this.id=id;
<shape id="_x0000_i1044" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image010.gif"></imagedata></shape>}

<shape id="_x0000_i1045" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>
<shape id="_x0000_i1046" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>
publicstringId
<shape id="Codehighlighter1_234_260_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1047"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image008.gif"></imagedata></shape><shape id="Codehighlighter1_234_260_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1048"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image009.gif"></imagedata></shape>
<shape id="_x0000_i1049" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><font color="#000000"> <imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image006.gif"></imagedata></font></shape>{
<shape id="Codehighlighter1_243_256_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1050"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image008.gif"></imagedata></shape><shape id="Codehighlighter1_243_256_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1051"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image009.gif"></imagedata></shape>
get<shape id="_x0000_i1052" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image006.gif"></imagedata></shape>{returnid;}
<shape id="_x0000_i1053" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image010.gif"></imagedata></shape>}
<shape id="_x0000_i1054" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>
<shape id="_x0000_i1055" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>
//Methods
<shape id="_x0000_i1056" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>abstractpublicPrototypeClone();
<shape id="_x0000_i1057" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image011.gif"></imagedata></shape>}

<shape id="_x0000_i1058" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>
<shape id="_x0000_i1059" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>
//"ConcretePrototype1"
<shape id="_x0000_i1060" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>classConcretePrototype1:Prototype
<shape id="Codehighlighter1_377_579_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1061"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image004.gif"></imagedata></shape><shape id="Codehighlighter1_377_579_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1062"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image005.gif"></imagedata></shape>
<shape id="_x0000_i1063" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image006.gif"></imagedata></shape>{
<shape id="_x0000_i1064" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>
//Constructors
<shape id="Codehighlighter1_452_453_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1065"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image008.gif"></imagedata></shape><shape id="Codehighlighter1_452_453_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1066"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image009.gif"></imagedata></shape>publicConcretePrototype1(stringid):base(id)<shape id="_x0000_i1067" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image006.gif"></imagedata></shape>{}
<shape id="_x0000_i1068" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>
<shape id="_x0000_i1069" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>
//Methods
<shape id="_x0000_i1070" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>overridepublicPrototypeClone()
<shape id="Codehighlighter1_507_577_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1071"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image008.gif"></imagedata></shape><shape id="Codehighlighter1_507_577_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1072"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image009.gif"></imagedata></shape>
<shape id="_x0000_i1073" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><font color="#000000"> <imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image006.gif"></imagedata></font></shape>{
<shape id="_x0000_i1074" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>
//Shallowcopy
<shape id="_x0000_i1075" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>return(Prototype)this.MemberwiseClone();
<shape id="_x0000_i1076" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image010.gif"></imagedata></shape>}

<shape id="_x0000_i1077" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image011.gif"></imagedata></shape>}
<shape id="_x0000_i1078" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>
<shape id="_x0000_i1079" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>
//"ConcretePrototype2"
<shape id="_x0000_i1080" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>classConcretePrototype2:Prototype
<shape id="Codehighlighter1_643_845_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1081"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image004.gif"></imagedata></shape><shape id="Codehighlighter1_643_845_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1082"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image005.gif"></imagedata></shape>
<shape id="_x0000_i1083" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image006.gif"></imagedata></shape>{
<shape id="_x0000_i1084" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>
//Constructors
<shape id="Codehighlighter1_718_719_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1085"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image008.gif"></imagedata></shape><shape id="Codehighlighter1_718_719_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1086"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image009.gif"></imagedata></shape>publicConcretePrototype2(stringid):base(id)<shape id="_x0000_i1087" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image006.gif"></imagedata></shape>{}
<shape id="_x0000_i1088" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>
<shape id="_x0000_i1089" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>
//Methods
<shape id="_x0000_i1090" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>overridepublicPrototypeClone()
<shape id="Codehighlighter1_773_843_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1091"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image008.gif"></imagedata></shape><shape id="Codehighlighter1_773_843_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1092"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image009.gif"></imagedata></shape>
<shape id="_x0000_i1093" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><font color="#000000"> <imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image006.gif"></imagedata></font></shape>{
<shape id="_x0000_i1094" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>
//Shallowcopy
<shape id="_x0000_i1095" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>return(Prototype)this.MemberwiseClone();
<shape id="_x0000_i1096" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image010.gif"></imagedata></shape>}

<shape id="_x0000_i1097" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image011.gif"></imagedata></shape>}
<shape id="_x0000_i1098" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>
<shape id="Codehighlighter1_848_892_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1099"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image004.gif"></imagedata></shape><shape id="Codehighlighter1_848_892_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1100"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image005.gif"></imagedata></shape>
/**////<summary>
<shape id="_x0000_i1101" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>///Clienttest
<shape id="_x0000_i1102" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image011.gif"></imagedata></shape>
///</summary>
<shape id="_x0000_i1103" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>classClient
<shape id="Codehighlighter1_906_1336_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1104"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image004.gif"></imagedata></shape><shape id="Codehighlighter1_906_1336_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1105"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image005.gif"></imagedata></shape>
<shape id="_x0000_i1106" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image006.gif"></imagedata></shape>{
<shape id="_x0000_i1107" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>
publicstaticvoidMain(string[]args)
<shape id="Codehighlighter1_953_1334_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1108"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image008.gif"></imagedata></shape><shape id="Codehighlighter1_953_1334_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1109"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image009.gif"></imagedata></shape>
<shape id="_x0000_i1110" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><font color="#000000"> <imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image006.gif"></imagedata></font></shape>{
<shape id="_x0000_i1111" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>
//Createtwoinstancesandcloneeach

<shape id="_x0000_i1112" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>ConcretePrototype1p1=newConcretePrototype1("I");
<shape id="_x0000_i1113" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>ConcretePrototype1c1=(ConcretePrototype1)p1.Clone();
<shape id="_x0000_i1114" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>Console.WriteLine("Cloned:{0}",c1.Id);
<shape id="_x0000_i1115" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>
<shape id="_x0000_i1116" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>ConcretePrototype2p2=
newConcretePrototype2("II");
<shape id="_x0000_i1117" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>ConcretePrototype2c2=(ConcretePrototype2)p2.Clone();
<shape id="_x0000_i1118" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>Console.WriteLine("Cloned:{0}",c2.Id);
<shape id="_x0000_i1119" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image010.gif"></imagedata></shape>}

<shape id="_x0000_i1120" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image011.gif"></imagedata></shape>}

这个例子实现了一个浅拷贝。其中MemberwiseClone()方法是Object类的一个受保护方法,实现了对象的浅拷贝。如果希望实现一个深拷贝,应该实现ICloneable接口,并自己编写ICloneable的Clone接口方法。

四、带Prototype Manager的原型模式

原型模式的第二种形式是带原型管理器的原型模式,其UML图如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值