原型模式(Prototype Pattern)

本文介绍了原型模式的概念、原理及应用场景,探讨了如何通过复制现有对象快速生成相同实例的方法,包括浅拷贝与深拷贝的区别,并提供了C#实现示例。

原型模式(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图如下:

<shape id="_x0000_i1121" style="WIDTH: 324pt; HEIGHT: 138pt" alt="" type="#_x0000_t75"><img src="https://p-blog.youkuaiyun.com/images/p_blog_youkuaiyun.com/edisundong/293088/o_p77.bmp" alt=""><imagedata o:href="http://www.cnblogs.com/images/cnblogs_com/zhenyulu/Pic56.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image012.gif"></imagedata></shape>

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


下面这个例子演示了在原型管理器中存储用户预先定义的颜色原型,客户通过原型管理器克隆颜色对象。

<shape id="_x0000_i1122" 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--RealWorldexample
<shape id="_x0000_i1123" 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_i1124" 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.Collections;
<shape id="_x0000_i1125" 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_i1126" 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_i1127" 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>abstractclassColorPrototype
<shape id="Codehighlighter1_131_188_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1128"><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_131_188_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1129"><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_i1130" 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_i1131" 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_i1132" 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>publicabstractColorPrototypeClone();
<shape id="_x0000_i1133" 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_i1134" 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_i1135" 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>
//"ConcretePrototype"
<shape id="_x0000_i1136" 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>classColor:ColorPrototype
<shape id="Codehighlighter1_243_688_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1137"><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_243_688_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1138"><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_i1139" 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_i1140" 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_i1141" 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>privateintred,green,blue;
<shape id="_x0000_i1142" 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_i1143" 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_i1144" 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>publicColor(intred,intgreen,intblue)
<shape id="Codehighlighter1_356_426_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1145"><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_356_426_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1146"><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_i1147" 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_i1148" 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.red=red;
<shape id="_x0000_i1149" 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.green=green;
<shape id="_x0000_i1150" 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.blue=blue;
<shape id="_x0000_i1151" 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_i1152" 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_i1153" 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_i1154" 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>publicoverrideColorPrototypeClone()
<shape id="Codehighlighter1_485_573_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1155"><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_485_573_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1156"><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_i1157" 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_i1158" 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>
//Createsa'shallowcopy'
<shape id="_x0000_i1159" 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(ColorPrototype)this.MemberwiseClone();
<shape id="_x0000_i1160" 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_i1161" 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_i1162" 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>
publicvoidDisplay()
<shape id="Codehighlighter1_602_686_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1163"><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_602_686_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1164"><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_i1165" 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_i1166" 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("RGBvaluesare:{0},{1},{2}",
<shape id="_x0000_i1167" 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>red,green,blue);
<shape id="_x0000_i1168" 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_i1169" 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_i1170" 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_i1171" 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>
//Prototypemanager
<shape id="_x0000_i1172" 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>classColorManager
<shape id="Codehighlighter1_731_938_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1173"><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_731_938_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1174"><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_i1175" 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_i1176" 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_i1177" 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>Hashtablecolors=newHashtable();
<shape id="_x0000_i1178" 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_i1179" 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>
//Indexers
<shape id="_x0000_i1180" 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>publicColorPrototypethis[stringname]
<shape id="Codehighlighter1_844_936_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1181"><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_844_936_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1182"><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_i1183" 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_853_894_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1184"><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_853_894_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1185"><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_i1186" 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>{return(ColorPrototype)colors[name];}
<shape id="Codehighlighter1_903_932_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1187"><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_903_932_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1188"><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>set<shape id="_x0000_i1189" 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>{colors.Add(name,value);}
<shape id="_x0000_i1190" 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_i1191" 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_i1192" 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_941_992_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1193"><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_941_992_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1194"><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_i1195" 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>///PrototypeApptest
<shape id="_x0000_i1196" 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_i1197" 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>classPrototypeApp
<shape id="Codehighlighter1_1012_1864_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1198"><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_1012_1864_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1199"><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_i1200" 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_i1201" 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_1059_1862_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1202"><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_1059_1862_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1203"><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_i1204" 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_i1205" 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>ColorManagercolormanager=
newColorManager();
<shape id="_x0000_i1206" 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_i1207" 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>
//Initializewithstandardcolors

<shape id="_x0000_i1208" 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>colormanager["red"]=newColor(255,0,0);
<shape id="_x0000_i1209" 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>colormanager["green"]=
newColor(0,255,0);
<shape id="_x0000_i1210" 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>colormanager["blue"]=
newColor(0,0,255);
<shape id="_x0000_i1211" 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_i1212" 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>
//Useraddspersonalizedcolors
<shape id="_x0000_i1213" 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>colormanager["angry"]=newColor(255,54,0);
<shape id="_x0000_i1214" 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>colormanager["peace"]=
newColor(128,211,128);
<shape id="_x0000_i1215" 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>colormanager["flame"]=
newColor(211,34,20);
<shape id="_x0000_i1216" 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_i1217" 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>
//Userusesselectedcolors
<shape id="_x0000_i1218" 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>stringcolorName="red";
<shape id="_x0000_i1219" 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>Colorc1=(Color)colormanager[colorName].Clone();
<shape id="_x0000_i1220" 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>c1.Display();
<shape id="_x0000_i1221" 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_i1222" 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>colorName="peace";
<shape id="_x0000_i1223" 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>Colorc2=(Color)colormanager[colorName].Clone();
<shape id="_x0000_i1224" 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>c2.Display();
<shape id="_x0000_i1225" 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_i1226" 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>colorName="flame";
<shape id="_x0000_i1227" 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>Colorc3=(Color)colormanager[colorName].Clone();
<shape id="_x0000_i1228" 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>c3.Display();
<shape id="_x0000_i1229" 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_i1230" 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>}

可以看到,客户程序通过注册原型实例就可以将一个具体产品类并入到系统中,在运行时刻,可以动态的建立和删除原型。最后还要注意一点,在上面的例子中,用的是浅表复制。如果想做深复制,需要通过序列化的方式来实现。经过了上面的分析之后,我们再来思考下面的问题:

1.为什么需要Prototype模式?

引入原型模式的本质在于利用已有的一个原型对象,快速的生成和原型对象一样的实例。你有一个A的实例a:A a = new A();现在你想生成和A一样的一个实例b,按照原型模式,应该是这样:A b = a.Clone();而不是重新再new一个A对象。通过上面这句话就可以得到一个和a一样的实例,确切的说,应该是它们的数据成员是一样的。Prototype模式同样是返回了一个A对象而没有使用new操作。

2.引入Prototype模式带来了什么好处?

可以看到,引入Prototype模式后我们不再需要一个与具体产品等级结构平行的工厂方法类,减少了类的构造,同时客户程序可以在运行时刻建立和删除原型。

3Prototype模式满足了哪些面向对象的设计原则?

依赖倒置原则:上面的例子,原型管理器(ColorManager)仅仅依赖于抽象部分(ColorPrototype),而具体实现细节(ConcteteColorPrototype)则依赖与抽象部分(ColorPrototype),所以Prototype很好的满足了依赖倒置原则。

<shape id="_x0000_i1231" style="WIDTH: 228pt; HEIGHT: 126pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/images/cnblogs_com/terrylee/PIC080.jpg" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image013.jpg"></imagedata></shape>

实现要点

1.使用原型管理器,体现在一个系统中原型数目不固定时,可以动态的创建和销毁,如上面的举的调色板的例子。

2.实现克隆操作,在.NET中可以使用Object类的MemberwiseClone()方法来实现对象的浅表拷贝或通过序列化的方式来实现深拷贝。

3Prototype模式同样用于隔离类对象的使用者和具体类型(易变类)之间的耦合关系,它同样要求这些“易变类”拥有稳定的接口。

效果

1.它对客户隐藏了具体的产品类,因此减少了客户知道的名字的数目。

2Prototype模式允许客户只通过注册原型实例就可以将一个具体产品类并入到系统中,客户可以在运行时刻建立和删除原型。

3.减少了子类构造,Prototype模式是克隆一个原型而不是请求工厂方法创建一个,所以它不需要一个与具体产品类平行的Creater类层次。

4Portotype模式具有给一个应用软件动态加载新功能的能力。由于Prototype的独立性较高,可以很容易动态加载新功能而不影响老系统。

5.产品类不需要非得有任何事先确定的等级结构,因为Prototype模式适用于任何的等级结构

6Prototype模式的最主要缺点就是每一个类必须配备一个克隆方法。而且这个克隆方法需要对类的功能进行通盘考虑,这对全新的类来说不是很难,但对已有的类进行改造时,不一定是件容易的事。

适用性

在下列情况下,应当使用Prototype模式:

1.当一个系统应该独立于它的产品创建,构成和表示时;

2.当要实例化的类是在运行时刻指定时,例如,通过动态装载;

3.为了避免创建一个与产品类层次平行的工厂类层次时;

4.当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。

总结

Prototype模式同工厂模式,同样对客户隐藏了对象的创建工作,但是,与通过对一个类进行实例化来构造新对象不同的是,原型模式是通过拷贝一个现有对象生成新对象的,达到了“隔离类对象的使用者和具体类型(易变类)之间的耦合关系”的目的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值