定義:原型模式(prototype)用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。
原型模式其實就是從乙個物件再建立另外乙個可定製的物件,而且不需要知道任何建立的細節。
以簡歷(resume)影印為例。程式**如下:
using system;
using system.collections.generic;
using system.linq;
using system.text;
//設定個人資訊
public void setpersonalinfo(string ***, string age)
//設定工作經歷
public void setworkexperience(string timearea, string company)
//顯示
public void display()
", name, ***, age);
console.writeline("工作經歷:", timearea, company);
}public object clone()}}
客戶端
static void main(string args)
l .net在system命名空間中提供了icloneable介面,其中就是唯一的乙個方法clone(),實現這個介面就可以完成原型模型了。
l 一般在初始化的資訊不發生變化的情況下,轉殖是最好的辦法。這樣即隱藏了物件建立的細節,又對效能是大大的提高。
l 不用重新初始化物件,而是動態地獲得物件執行時的狀態。
定義:模板方法模式定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變乙個演算法的結構即可重新定義該演算法的某些特定步驟。
模板方法模式就是把不變的行為搬移到超類,去除子類中重複**來體現它的優勢。也就是說當可變的或者不可變的行為在方法的子類實現中混合在一起的時候,不變的行為就會在子類中重複出現,這樣通過模板方法模式可以把這些行為搬移到單一的地方,從而幫助子類擺脫重複的不變行為的糾纏。
簡而言之,它提供了乙個很好的**復用平台。
以試卷**為例
using system;
using system.collections.generic;
using system.linq;
using system.text;
protected virtual string answer1()
public void testquestion2()
protected virtual string answer2()
public void testquestion3()
protected virtual string answer3()
}class test*****a : test*****
protected override string answer2()
protected override string answer3()
}class test*****b : test*****
protected override string answer2()
protected override string answer3()}}
客戶端**
static void main(string args)
我們可以看到試卷的內容是一樣的,只有答案是不同,因為不同學生答案不同。那我們就可以把答案抽象出乙個虛的方法,在子類中延期實現。
聯絡:把問題放到乙個地方,提供乙個**復用的平台,把變化的和不變的東西分離開,來實現某種需求。
區別:原型模型意在通過拷貝,或者說影印,以期在客戶端最小的**修改量,來實現自己的目的。
而模板方法模式是封裝不變的,擴充套件可變的,把可變的與不可變的行為分離開來,從而使得**可以更好地使用。
這時不免想到建造者模式,把建造**與表示**分離,建造者隱藏了內部建造的細節,若是需要改變乙個產品內部,只需定義乙個具體的建造者即可。這也是增強了**的復用性,這樣也使得**易被使用。
設計模式C 實現(5) 原型模式 模板方法模式
軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設計模式 和 設...
設計模式C 實現(5) 原型模式 模板方法模式
分類 軟體設計模式c 實現 2011 08 11 08 38 15人閱讀收藏 舉報 軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式...
設計模式C 實現(5) 原型模式 模板方法模式
軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設計模式 和 設...