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

C#設計模式之原型設計模式(Prototype)(1)

編輯:關於C語言

一、原型(Prototype)模式

原型模式的用意是:通過給出一個原型對象來指明所要創建的對象類型,然後用復制這個原型對象的辦法創建出更多的同類型對象。

從孫大聖的手段談起

孫悟空在與黃風怪的戰斗中,"使一個身外身的手段:把毫毛揪下一把,用口嚼得粉碎,望上一噴,叫聲'變',變有百十個行者,都是一樣得打扮,各執一根鐵棒,把那怪圍在空中。"換而言之,孫悟空可以根據自己的形象,復制出很多"身外身"來。

老孫這種身外身的手段在面向對象設計領域裡叫原型(Prototype)模式。

C#對原型模式的支持

在C#裡面,我們可以很容易的通過Clone()方法實現原型模式。任何類,只要想支持克隆,必須實現C#中的ICloneable接口。ICloneable接口中有一Clone方法,可以在類中復寫實現自定義的克隆方法。克隆的實現方法有兩種:淺拷貝(shallow copy)與深拷貝(deep copy)。

(以下摘自:《.Net框架程序設計(修訂版)》,李建忠譯)淺拷貝是指當對象的字段值被拷貝時,字段引用的對象不會被拷貝。例如,如果一個對象有一個指向字符串的字段,並且我們對該對象做了一個淺拷貝,那麼兩個對象將引用同一個字符串。而深拷貝是對對象實例中字段引用的對象也進行拷貝的一種方式,所以如果一個對象有一個指向字符串的字段,並且我們對該對象做了一個深拷貝的話,我們將創建一個新的對象和一個新的字符串--新對象將引用新字符串。需要注意的是執行深拷貝後,原來的對象和新創建的對象不會共享任何東西;改變一個對象對另外一個對象沒有任何影響。

二、Prototype模式的結構:

客戶(ClIEnt)角色:客戶類提出創建對象的請求。

抽象原型(Prototype)角色:這是一個抽象角色,通常由一個C#接口或抽象類實現。此角色給出所有的具體原型類所需的接口。在C#中,抽象原型角色通常實現了ICloneable接口。

具體原型(Concrete Prototype)角色:被復制的對象。此角色需要實現抽象原型角色所要求的接口。

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