程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#設計模式(6)——原型模式(Prototype Pattern)

C#設計模式(6)——原型模式(Prototype Pattern)

編輯:C#入門知識

一、引言

在軟件系統中,當創建一個類的實例的過程很昂貴或很復雜,並且我們需要創建多個這樣類的實例時,如果我們用new操作符去創建這樣的類實例,這未免會增加創建類的復雜度和耗費更多的內存空間,因為這樣在內存中分配了多個一樣的類實例對象,然後如果采用工廠模式來創建這樣的系統的話,隨著產品類的不斷增加,導致子類的數量不斷增多,反而增加了系統復雜程度,所以在這裡使用工廠模式來封裝類創建過程並不合適,然而原型模式可以很好地解決這個問題,因為每個類實例都是相同的,當我們需要多個相同的類實例時,沒必要每次都使用new運算符去創建相同的類實例對象,此時我們一般思路就是想——只創建一個類實例對象,如果後面需要更多這樣的實例,可以通過對原來對象拷貝一份來完成創建,這樣在內存中不需要創建多個相同的類實例,從而減少內存的消耗和達到類實例的復用。 然而這個思路正是原型模式的實現方式。下面就具體介紹下設計模式中的原型設計模式。

二、原型模式的詳細介紹

在現實生活中,也有很多原型設計模式的例子,。具體的實現代碼如下:

      Main(
            MonkeyKingPrototype prototypeMonkeyKing =  ConcretePrototype(
            MonkeyKingPrototype cloneMonkeyKing = prototypeMonkeyKing.Clone() +
            MonkeyKingPrototype cloneMonkeyKing2 = prototypeMonkeyKing.Clone()  + 
     
         Id { ;  MonkeyKingPrototype(.Id =
          
     
      ConcretePrototype( 
         
         
         
             (MonkeyKingPrototype)

上面原型模式的運行結果為(從運行結果可以看出,創建的兩個拷貝對象的ID屬性都是與原型對象ID屬性一樣的):

上面代碼實現的淺拷貝的方式,

介紹完原型模式的實現代碼之後,下面看下原型模式的類圖,通過類圖來理清原型模式實現中類之間的關系。具體類圖如下:

三、原型模式的優缺點

原型模式的優點有:

原型模式的缺點有:

四、.NET中原型模式的實現

在.NET中可以很容易地通過實現ICloneable接口()中Clone()方法來實現原型模式,如果我們想我們自定義的類具有克隆的功能,首先定義類繼承與ICloneable接口並實現Clone方法。在.NET中實現了原型模式的類如下圖所示(圖中只截取了部分,可以用Reflector反編譯工具進行查看):

 

五、總結

到這裡關於原型模式的介紹就結束了,原型模式用一個原型對象來指明所要創建的對象類型,然後用復制這個原型對象的方法來創建出更多的同類型對象,。

本專題中所有源碼:設計模式之原型模式

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved