C設(shè)計(jì)模式李建忠_第1頁(yè)
C設(shè)計(jì)模式李建忠_第2頁(yè)
C設(shè)計(jì)模式李建忠_第3頁(yè)
C設(shè)計(jì)模式李建忠_第4頁(yè)
C設(shè)計(jì)模式李建忠_第5頁(yè)
已閱讀5頁(yè),還剩239頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、單件模式(Singleton Pattern)動(dòng)機(jī)(Motivation):    在軟件系統(tǒng)中,經(jīng)常有這樣一些特殊的類,必須保證它們?cè)谙到y(tǒng)中只存在一個(gè)實(shí)例,才能確保它們的邏輯正確性、以及良好的效率。    如何繞過(guò)常規(guī)的構(gòu)造器,提供一種機(jī)制來(lái)保證一個(gè)類只創(chuàng)建一個(gè)實(shí)例?    這應(yīng)該是類設(shè)計(jì)者的責(zé)任,而不是類使用者的責(zé)任。結(jié)構(gòu)圖:        意圖:    保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪

2、問(wèn)點(diǎn)。                                -<<設(shè)計(jì)模式>>GOF生活的例子:          適用性:   (1)當(dāng)類只能有一個(gè)實(shí)例而且客戶可以從一個(gè)眾所周知的訪問(wèn)點(diǎn)訪問(wèn)它時(shí)。   (2)當(dāng)這個(gè)唯一實(shí)例應(yīng)

3、該是通過(guò)子類化可擴(kuò)展的,并且客戶應(yīng)該無(wú)需更改代碼就能使用一個(gè)擴(kuò)展的實(shí)例時(shí)。代碼實(shí)現(xiàn):(1)單線程Singleton實(shí)現(xiàn)       class SingleThread_Singleton            private static SingleThread_Singleton instance = null;    &

4、#160;   private  SingleThread_Singleton()        public static SingleThread_Singleton Instance                    get

5、60;                           if (instance = null)                

6、0;                   instance = new SingleThread_Singleton();                     

7、60;          return instance;                        以上代碼在單線程情況下不會(huì)出現(xiàn)任何問(wèn)題。但是在多線程的情況下卻不是安全的。如兩個(gè)線程同時(shí)運(yùn)行到 if (instance =

8、 null)判斷是否被實(shí)例化,一個(gè)線程判斷為True后,在進(jìn)行創(chuàng)建 instance = new SingleThread_Singleton();之前,另一個(gè)線程也判斷(instance = null),結(jié)果也為True.這樣就就違背了Singleton模式的原則(保證一個(gè)類僅有一個(gè)實(shí)例)。怎樣在多線程情況下實(shí)現(xiàn)Singleton?(2)多線程Singleton實(shí)現(xiàn): 1    class MultiThread_Singleton 2 

9、60;    3       private  static volatile MultiThread_Singleton instance = null; 4       private static object lockHelper = new object(); 

10、;5       private MultiThread_Singleton()   6       public static MultiThread_Singleton Instance 7        8       &#

11、160;   get 9           10               if (instance = null)11            &

12、#160;  12                   lock (lockHelper)13                   14    

13、60;                  if (instance = null)15                       16  

14、                         instance = new MultiThread_Singleton();17               

15、0;       18                   19               20       

16、0;       return instance;21                    22       23     此程序?qū)Χ嗑€程是安全的,使用了一個(gè)輔助對(duì)象lockHelper,保證只有一個(gè)線程創(chuàng)建

17、實(shí)例(如果instance為空,保證只有一個(gè)線程instance = new MultiThread_Singleton();創(chuàng)建唯一的一個(gè)實(shí)例)。(Double Check)請(qǐng)注意一個(gè)關(guān)鍵字volatile,如果去掉這個(gè)關(guān)鍵字,還是有可能發(fā)生線程不是安全的。volatile 保證嚴(yán)格意義的多線程編譯器在代碼編譯時(shí)對(duì)指令不進(jìn)行微調(diào)。(3)靜態(tài)Singleton實(shí)現(xiàn)3         class Static_Singleton4   &

18、#160;     5             public static readonly Static_Singleton instance = new Static_Singleton();6             private&

19、#160;Static_Singleton()  7         以上代碼展開(kāi)等同于1     class Static_Singleton2         3             public static&

20、#160;readonly Static_Singleton instance;4             static Static_Singleton()5             6          &

21、#160;      instance = new Static_Singleton();7             8             private Static_Singleton()  9 &#

22、160;       由此可以看出,完全符合Singleton的原則。優(yōu)點(diǎn): 簡(jiǎn)潔,易懂缺點(diǎn): 不可以實(shí)現(xiàn)帶參數(shù)實(shí)例的創(chuàng)建抽象工廠模式(Abstract Factory)常規(guī)的對(duì)象創(chuàng)建方法:/創(chuàng)建一個(gè)Road對(duì)象Road road =new Road();new 的問(wèn)題:    實(shí)現(xiàn)依賴,不能應(yīng)對(duì)“具體實(shí)例化類型”的變化。解決思路:    封裝變化點(diǎn)-哪里變化,封裝哪里    潛臺(tái)詞: 如果沒(méi)有變化,當(dāng)然不

23、需要額外的封裝!工廠模式的緣起    變化點(diǎn)在“對(duì)象創(chuàng)建”,因此就封裝“對(duì)象創(chuàng)建”    面向接口編程-依賴接口,而非依賴實(shí)現(xiàn)最簡(jiǎn)單的解決方法:1 class RoadFactory2 public static Road CreateRoad()3                   &

24、#160;             4   return new Road();   5 6 7 /創(chuàng)建一個(gè)Road對(duì)象8 Road road=roadFactory.CreateRoad();創(chuàng)建一系列相互依賴對(duì)象的創(chuàng)建工作:假設(shè)一個(gè)游戲開(kāi)場(chǎng)景:我們需要構(gòu)造"道路"、"房屋"、"地道&q

25、uot;,"從林".等等對(duì)象工廠方法如下: 1     class RoadFactory 2      3         public static Road CreateRoad() 4          

26、;5             return new Road(); 6          7         public static Building CreateBuilding() 8 

27、60;        9             return new Building();10         11         public static Tu

28、nnel CreateTunnel()12         13             return new Tunnel();14         15        

29、0;public static Jungle CreateJungle()16         17             return new Jungle();18         19    

30、 調(diào)用方式如下: 1         Road road =  RoadFactory.CreateRoad();3         Building building = RoadFactory.CreateBuilding();4         Tunn

31、el tunnel = RoadFactory.CreateTunnel();5         Jungle jungle = RoadFactory.CreateJungle();如上可見(jiàn)簡(jiǎn)單工廠的問(wèn)題:    不能應(yīng)對(duì)"不同系列對(duì)象"的變化。比如有不同風(fēng)格的場(chǎng)景-對(duì)應(yīng)不同風(fēng)格的道路,房屋、地道.如何解決:    使用面向?qū)ο蟮募夹g(shù)來(lái)"封裝"變

32、化點(diǎn)。動(dòng)機(jī)(Motivate):    在軟件系統(tǒng)中,經(jīng)常面臨著"一系統(tǒng)相互依賴的對(duì)象"的創(chuàng)建工作:同時(shí),由于需求的變化,往往存在更多系列對(duì)象的創(chuàng)建工作。    如何應(yīng)對(duì)這種變化?如何繞過(guò)常規(guī)的對(duì)象創(chuàng)建方法(new),提供一種"封裝機(jī)制"來(lái)避免客戶程序和這種"多系列具體對(duì)象創(chuàng)建工作"的緊耦合?意圖(Intent):    提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無(wú)需指定它們具體的類。     

33、;                                            -設(shè)計(jì)模式GOF結(jié)構(gòu)圖(Struct):    &

34、#160;       適用性:    1.一個(gè)系統(tǒng)要獨(dú)立于它的產(chǎn)品的創(chuàng)建、組合和表示時(shí)。    2.一個(gè)系統(tǒng)要由多個(gè)產(chǎn)品系統(tǒng)中的一個(gè)來(lái)配置時(shí)。    3.當(dāng)你要強(qiáng)調(diào)一系列相關(guān)的產(chǎn)品對(duì)象的設(shè)計(jì)以便進(jìn)行聯(lián)合使用時(shí)。    4.當(dāng)你提供一個(gè)產(chǎn)品類庫(kù),而只想顯示它們的接口不是實(shí)現(xiàn)時(shí)。生活例子:           

35、    結(jié)構(gòu)圖代碼實(shí)現(xiàn):1  abstract class AbstractFactory2     3        public abstract AbstractProductA CreateProductA();4        public abstract 

36、AbstractProductB CreateProductB();5     1   abstract class AbstractProductA2     3        public abstract void Interact(AbstractProductB b);4   &

37、#160; 1   abstract class AbstractProductB2     3        public abstract void Interact(AbstractProductA a);4       1    class 

38、Client 2      3         private AbstractProductA AbstractProductA; 4         private AbstractProductB AbstractProductB; 5    

39、     public Client(AbstractFactory factory) 6          7             AbstractProductA = factory.CreateProductA(); 8  

40、60;          AbstractProductB = factory.CreateProductB();            9         10         

41、public void Run()11         12             AbstractProductB.Interact(AbstractProductA);13             AbstractProdu

42、ctA.Interact(AbstractProductB);14         15      1  class ConcreteFactory1:AbstractFactory 2      3         public override&

43、#160;AbstractProductA CreateProductA() 4          5             return new ProductA1(); 6          7 

44、0;       public override AbstractProductB CreateProductB() 8          9             return new ProductB1();10  

45、;       11      1     class ConcreteFactory2:AbstractFactory 2      3         public override AbstractProductA 

46、;CreateProductA() 4          5             return new ProdcutA2(); 6          7      

47、   public override AbstractProductB CreateProductB() 8          9             return new ProductB2();10      &

48、#160;  11     1  class ProductA1:AbstractProductA2     3         public override void Interact(AbstractProductB b)4       

49、60; 5             Console.WriteLine(this.GetType().Name + "interact with" + b.GetType().Name);6         7     1  &#

50、160;class ProductB1:AbstractProductB2     3         public override void Interact(AbstractProductA a)4         5        

51、     Console.WriteLine(this.GetType().Name + "interact with" + a.GetType().Name);6         7     1   class ProdcutA2:AbstractProductA2  

52、0;  3         public override void Interact(AbstractProductB b)4         5             Console.WriteLine(this.GetTy

53、pe().Name + "interact with" + b.GetType().Name);6         7     1  class ProductB2:AbstractProductB2     3        &

54、#160;public override void Interact(AbstractProductA a)4         5             Console.WriteLine(this.GetType().Name + "interact with" + 

55、;a.GetType().Name);6         7      1    public static void Main() 2          3         &#

56、160;/ Abstractfactory1 4             AbstractFactory factory1 = new ConcreteFactory1(); 5             Client c1 = new

57、60;Client(factory1); 6             c1.Run(); 7         / Abstractfactory2 8             AbstractFactory&#

58、160;factory2 = new ConcreteFactory2(); 9             Client c2 = new Client(factory2);10             c2.Run();11   

59、      Abstract Factory注意的幾點(diǎn):    如果不存在”多系列對(duì)象創(chuàng)建“的需求變化,則沒(méi)必要應(yīng)用Abstract Factory模式,靜態(tài)工廠方法足矣。    "系列對(duì)象"指的是這些對(duì)象之間有相互依賴、或作用的關(guān)系。例如游戲開(kāi)發(fā)場(chǎng)景中的"道路"與"房屋"依賴,“道路”與“地道”的依賴。Abstract Factory模式主要在于應(yīng)對(duì)"新系列"的需求變動(dòng)。其缺點(diǎn)在于難以應(yīng)對(duì)”新對(duì)

60、象“的需求變動(dòng)。Abstract Factory模式經(jīng)常和Factory Method模式共同組合來(lái)應(yīng)對(duì)“對(duì)象創(chuàng)建”的需求變化建造者模式(Builder)Builder模式的緣起:    假設(shè)創(chuàng)建游戲中的一個(gè)房屋House設(shè)施,該房屋的構(gòu)建由幾部分組成,且各個(gè)部分富于變化。如果使用最直觀的設(shè)計(jì)方法,每一個(gè)房屋部分的變化,都將導(dǎo)致房屋構(gòu)建的重新修正.動(dòng)機(jī)(Motivation):    在軟件系統(tǒng)中,有時(shí)候面臨一個(gè)"復(fù)雜對(duì)象"的創(chuàng)建工作,其通常由各個(gè)部分的子對(duì)象用一定算法構(gòu)成;由于需求的變化,這個(gè)復(fù)雜對(duì)象的各個(gè)部分經(jīng)

61、常面臨著劇烈的變化,但是將它們組合到一起的算法卻相對(duì)穩(wěn)定。    如何應(yīng)對(duì)種變化呢?如何提供一種"封裝機(jī)制"來(lái)隔離出"復(fù)雜對(duì)象的各個(gè)部分"的變化,從而保持系統(tǒng)中的"穩(wěn)定構(gòu)建算法"不隨需求的改變而改變?意圖(Intent):    將一個(gè)復(fù)雜對(duì)象的構(gòu)建與其表示相分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。                   

62、0;                          -設(shè)計(jì)模式GOF結(jié)構(gòu)圖(Struct):                   協(xié)作(Collaborations):       &#

63、160;          生活中的例子:             適用性:    1.當(dāng)創(chuàng)建復(fù)雜對(duì)象的算法應(yīng)該獨(dú)立于該對(duì)象的組成部分以及它們的裝配方式時(shí)。    2.當(dāng)構(gòu)造過(guò)程必須允許被構(gòu)造的對(duì)象有不同的表示時(shí)。實(shí)例代碼:Builder類: 1  public abstract 

64、;class Builder 2      3         public abstract void BuildDoor(); 4         public abstract void BuildWall(); 5   &

65、#160;     public abstract void BuildWindows(); 6         public abstract void BuildFloor(); 7         public abstract void BuildHo

66、useCeiling(); 8      9         public abstract House GetHouse();10     Director類:這一部分是 組合到一起的算法(相對(duì)穩(wěn)定)。 1 public class Director 2     &#

67、160;3       public void Construct(Builder builder) 4        5           builder.BuildWall(); 6        

68、60;  builder.BuildHouseCeiling();           7           builder.BuildDoor(); 8           builder.BuildWindows(); 9&

69、#160;          builder.BuildFloor();         10       11     ChineseBuilder類 1    public class ChineseBuilder:

70、Builder 2      3        private House ChineseHouse = new House(); 4         public override void BuildDoor() 5   &#

71、160;      6             Console.WriteLine("this Door 's style of Chinese"); 7          8    

72、;     public override void BuildWall() 9         10             Console.WriteLine("this Wall 's style of Chines

73、e");11         12         public override void BuildWindows()13         14            

74、; Console.WriteLine("this Windows 's style of Chinese");15         16         public override void BuildFloor()17      &#

75、160;  18             Console.WriteLine("this Floor 's style of Chinese");19         20         p

76、ublic override void BuildHouseCeiling()21         22             Console.WriteLine("this Ceiling 's style of Chinese");23  

77、60;      24         public override House GetHouse()25         26             return ChineseHou

78、se;27         28     RomanBuilder類: 1     class RomanBuilder:Builder 2      3         private House Roman

79、House = new House(); 4         public override void BuildDoor() 5          6             Console.Wri

80、teLine("this Door 's style of Roman"); 7          8         public override void BuildWall() 9        

81、; 10             Console.WriteLine("this Wall 's style of Roman");11         12         public o

82、verride void BuildWindows()13         14             Console.WriteLine("this Windows 's style of Roman");15     

83、0;   16         public override void BuildFloor()17         18             Console.WriteLine("this Floor&

84、#160;'s style of Roman");19         20         public override void BuildHouseCeiling()21         22    &#

85、160;        Console.WriteLine("this Ceiling 's style of Roman");23         24         public override House GetHouse

86、()25         26             return RomanHouse;27         28     ChineseBuilder和RomanBuilder這兩個(gè)是:這個(gè)復(fù)雜對(duì)象的兩個(gè)部分經(jīng)常面臨著劇烈的

87、變化。 1   public class Client 2      3         public static void Main(string args) 4          5   

88、60;         Director director = new Director(); 6  7             Builder instance; 8  9        

89、     Console.WriteLine("Please Enter House No:");10 11             string No = Console.ReadLine();12 13         

90、60;   string houseType = ConfigurationSettings.AppSettings"No" + No;14 15             instance = (Builder)Assembly.Load("House").CreateInstance("House.&quo

91、t; + houseType);16 17             director.Construct(instance);18 19             House house= instance.GetHouse();20    

92、         house.Show();21 22             Console.ReadLine();23         24     1 <?xml version="1.0

93、" encoding="utf-8" ?>2 <configuration>3   <appSettings>4     <add key="No1" value="RomanBuilder"></add>5     <add key="No2" v

94、alue="ChineseBuilder"></add>6   </appSettings>7 </configuration>Builder模式的幾個(gè)要點(diǎn):Builder模式 主要用于“分步驟構(gòu)建一個(gè)復(fù)雜的對(duì)象”。在這其中“分步驟”是一個(gè)穩(wěn)定的乘法,而復(fù)雜對(duì)象的各個(gè)部分則經(jīng)常變化。Builder模式主要在于應(yīng)對(duì)“復(fù)雜對(duì)象各個(gè)部分”的頻繁需求變動(dòng)。其缺點(diǎn)在于難以應(yīng)對(duì)“分步驟構(gòu)建算法”的需求變動(dòng)。Abstract Factory模式解決“系列對(duì)象”的需求變化,Builder模式解決“對(duì)象部分”的

95、需求變化。Builder械通常和Composite模式組合使用工廠方法模式(Factory Method)耦合關(guān)系:       動(dòng)機(jī)(Motivation):    在軟件系統(tǒng)中,由于需求的變化,"這個(gè)對(duì)象的具體實(shí)現(xiàn)"經(jīng)常面臨著劇烈的變化,但它卻有比較穩(wěn)定的接口。    如何應(yīng)對(duì)這種變化呢?提供一種封裝機(jī)制來(lái)隔離出"這個(gè)易變對(duì)象"的變化,從而保持系統(tǒng)中"其它依賴的對(duì)象"不隨需求的變化而變化。意圖(Intent): 

96、   定義一個(gè)用戶創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例哪一個(gè)類。Factory Method使一個(gè)類的實(shí)例化延遲到子類。                                                     

97、       -設(shè)計(jì)模式GOF結(jié)構(gòu)圖(Struct):                生活實(shí)例:          適用性:    1.當(dāng)一個(gè)類不知道它所必須創(chuàng)建的對(duì)象類的時(shí)候。    2.當(dāng)一個(gè)類希望由它子類來(lái)指定它所創(chuàng)建對(duì)象的時(shí)候。    3.當(dāng)類將創(chuàng)建對(duì)象的職責(zé)委托給多個(gè)幫助子類中的

98、某個(gè),并且你希望將哪一個(gè)幫助子類是代理者這一信息局部化的時(shí)候。實(shí)例代碼:CarFactory類:1    public abstract class CarFactory2     3        public abstract Car CarCreate();4     Car類: 1  

99、60;public abstract class Car2     3        public abstract void StartUp();4        public abstract void Run();5      

100、60; public abstract void Stop();6       7     HongQiCarFactory類:1   public class HongQiCarFactory:CarFactory2     3        public&

101、#160;override Car CarCreate()4        5            return new HongQiCar();6        7     BMWCarFactory類:1 

102、0; public class BMWCarFactory:CarFactory2     3        public override Car CarCreate()4        5           

103、60;return new BMWCar();6        7     HongQiCar類: 1   public  class HongQiCar:Car 2      3       public override

104、60;void StartUp() 4        5           Console.WriteLine("Test HongQiCar start-up speed!"); 6        7    

105、;   public override void Run() 8        9           Console.WriteLine("The HongQiCar run is very quickly!");10    &

106、#160;  11       public override void Stop()12       13           Console.WriteLine("The slow stop time is 3 second&

107、#160;");14       15     BMWCar類: 1    public  class BMWCar:Car 2      3        public override void Start

108、Up() 4         5            Console.WriteLine("The BMWCar start-up speed is very quickly"); 6        

109、0;7        public override void Run() 8         9            Console.WriteLine("The BMWCar run is quitely 

110、;fast and safe!");10        11        public override void Stop()12        13            C

111、onsole.WriteLine("The slow stop time is 2 second");14        15     app.config1 <?xml version="1.0" encoding="utf-8" ?>2 <configuration>3&

112、#160;  <appSettings>4     <add key="No1" value="HongQiCarFactory"/>5     <add key="No2" value="BMWCarFactory"/>6   </appSettings>7 </

113、configuration>Program類: 1  class Program 2      3         static void Main(string args) 4          5    

114、60;        Console.WriteLine("Please Enter Factory Method No:"); 6             Console.WriteLine("*"); 7       

115、;      Console.WriteLine("no         Factory Method"); 8             Console.WriteLine("1       

116、0;  HongQiCarFactory"); 9             Console.WriteLine("2          BMWCarFactory");10           

117、60; Console.WriteLine("*");11             int no=Int32.Parse(Console.ReadLine().ToString();12             string factoryType=ConfigurationManager

118、.AppSettings"No"+no;13             /CarFactory factory = new HongQiCarFactory();14             CarFactory factory = (CarFacto

119、ry)Assembly.Load("FactoryMehtod").CreateInstance("FactoryMehtod." + factoryType); 15             Car car=factory.CarCreate();16           &#

120、160; car.StartUp();17             car.Run();18             car.Stop();19             20  &

121、#160;      21     Factory Method 模式的幾個(gè)要點(diǎn):Factory Method模式主要用于隔離類對(duì)象的使用者和具體類型之間的耦合關(guān)系。面對(duì)一個(gè)經(jīng)常變化的具體類型,緊耦合關(guān)系會(huì)導(dǎo)致軟件的脆弱。Factory Method模式通過(guò)面向?qū)ο蟮氖址?,將所要?jiǎng)?chuàng)建的具體對(duì)象工作延遲到子類,從而實(shí)現(xiàn)一種擴(kuò)展(而非更改)的策略,較好地解決了這種緊耦合關(guān)系。Factory Mehtod模式解決"單個(gè)對(duì)象"的需求變化,AbstractFactory模式解

122、決"系列對(duì)象"的需求變化,Builder模式解決"對(duì)象部分"的需求變化原型模式(Prototype)依賴關(guān)系倒置:             動(dòng)機(jī)(Motivate):    在軟件系統(tǒng)中,經(jīng)常面臨著“某些結(jié)構(gòu)復(fù)雜的對(duì)象”的創(chuàng)建工作;由于需求的變化,這些對(duì)象經(jīng)常面臨著劇烈的變化,但是它們卻擁有比較穩(wěn)定一致的接口。    如何應(yīng)對(duì)這種變化?如何向“客戶程序(使用這些對(duì)象的程序)"隔離出“這些易變對(duì)象”,從而使得

123、“依賴這些易變對(duì)象的客戶程序”不隨著需求改變而改變?意圖(Intent):    用原型實(shí)例指定創(chuàng)建對(duì)象的種類,并且通過(guò)拷貝這些原型創(chuàng)建新的對(duì)象。                                         -設(shè)計(jì)模式GOF結(jié)構(gòu)圖(Struct):  

124、;              生活例子:                                           &#

125、160;            適用性:  1當(dāng)一個(gè)系統(tǒng)應(yīng)該獨(dú)立于它的產(chǎn)品創(chuàng)建,構(gòu)成和表示時(shí);    2當(dāng)要實(shí)例化的類是在運(yùn)行時(shí)刻指定時(shí),例如,通過(guò)動(dòng)態(tài)裝載;    3為了避免創(chuàng)建一個(gè)與產(chǎn)品類層次平行的工廠類層次時(shí);    4當(dāng)一個(gè)類的實(shí)例只能有幾個(gè)不同狀態(tài)組合中的一種時(shí)。建立相應(yīng)數(shù)目的原型并克隆它們可能比每次用合適的狀態(tài)手工實(shí)例化該類更方便一些。 示意性代碼例子:1 publ

126、ic  abstract class NormalActor2     3         public abstract NormalActor clone();4     1    public class NormalActorA:NormalActor2 

127、60;   3        public override NormalActor clone()4        5            Console.WriteLine("NormalActorA is call&quo

128、t;);6            return (NormalActor)this.MemberwiseClone();7            8        9     1   pub

129、lic class NormalActorB :NormalActor2     3        public override NormalActor clone()4        5           

130、0;Console.WriteLine("NormalActorB  was called");6            return (NormalActor)this.MemberwiseClone();7            8     &#

131、160;  9        public class GameSystem           public void Run(NormalActor normalActor)                  NormalActor normalActor

132、1 = normalActor.clone();           NormalActor normalActor2 = normalActor.clone();           NormalActor normalActor3 = normalActor.clone();          

133、 NormalActor normalActor4 = normalActor.clone();           NormalActor normalActor5 = normalActor.clone();                          class Pr

134、ogram                                                 &

135、#160;                                                 &

136、#160;                                                 &

137、#160;                                                        static void Main(string args)          &

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論