Prototype設計模式的實現

Prototype設計模式的實現<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

Implementing the Prototype design Pattern

 

      下載本文代碼

當我建立一個類的實例很複雜時,我們可以使用Prototype模式。與其建立很多類的實例,還不如進行適當的修改後,使用最初的實例的副本。使用Prototype模式,可以通過克隆一個原型,減少子類的數量。Prototype模式可以減少類的實例的數量。

      在這個模式中,通過克隆來創建對象。我們有時創建很多的子類,除了通過很多的子類來創建不同的對象,我們還可以只需要唯一的一個子類,這個子類保持對每個對象基類的引用,並通過這個子類創建對象。通過向子類的構造函數傳遞參數並克隆對象。每個對象都實現clone方法,所以可以被克隆。我們可以使用Prototype模式,通過克隆原型來減少子類的數量。

       克隆可以通過實現Icloneable接口來實現。Icloneable接口中唯一的方法是Clone,並返回一個新的類的實例。

ICloneable.Clone method signature
[VisualBasic] Function Clone() As Object
[C#]
object Clone();


我們必須瞭解Clone()方法只是一種淺表複製(Shallow copy),而不是深層複製(Deep copy)。所以它只是返回一個引用,而不象深層複製(Deep copy)那樣創建一個複製的實例。我們可以通過使用Iserializable接口來實現深層複製(Deep copy)。

另一個缺點就是原型的每個子類必須實現Clone()方法,有時候,增加clone方法是很困難的。

在這個例子中,我建立了EmpData類,並且實現了Icloneable接口和Iserializable接口。Icloneable接口需要實現Clone方法,使得類可以被複制。Iserializable接口爲了實現對EmpData類的深層複製(Deep copy)。使用的方法爲:將EmpData對象序列化爲一個文件,也可以將這個文件反序列化爲一個EmpData對象。

EmpData類包含兩個方法:GetEmpDataChangeEmpData。這兩個方法被用來以一個字符串(string)的形式獲取EmpData對象、更改EmpData類。每個方法都可以被調用,來檢驗淺表複製(Shallow copy)和深層複製(Deep copy)的不同。淺表複製(Shallow copy)時,如果EmpData類改變時,這個變化也會同時出現在EmpData的克隆對象中;而在深層複製(Deep copy),如果EmpData對象發生改變時,這個變化不會出現在EmpData的克隆對象中。

EmpData類的構造函數讀取XML文件並創建Emp對象。

 

實現見(二)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章