設計模式(五) 模板方法,原型模式 C 實現

2021-08-19 18:56:10 字數 1601 閱讀 1355

簡單,就是多型非常簡單的運用!
定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變乙個演算法的結構即可重新定義該演算法的某些特定步驟

在做程式的過程中,會用到繼承,就要繼承做的更有價值,成為子類的模板,所有重複的**都應該上公升到父類中,而不是讓每個子類都去重複。當我們要完成某乙個細節層次一致的乙個過程或一系列步驟,但其個別步驟在更詳細的層次上的實現可能不同時,用到模板方法模式,將不同的地方轉移到子類中,在需要的時候進行重新定義。

舉例大部分人不可能一生就乙個固定的工作,所以在寫簡歷的過程注定有一欄是工作經歷。可是每一次工作經歷大概相同,無非就是入職年份,任期工作內容,離職時間。但是具體的內容又不一樣,隨著不斷的求職,這個隨之改變,不能每一次求職都重寫乙份原型吧。這個時候可以用到模板方法模式。把工作經歷中大概流程放到抽象類中,把具體的內容填寫到子類中。這樣在抽象類中定義乙個操作演算法的骨架,將具體的步驟延遲到子類中。

**:

class namedb

virtual

void setinitia() {}

virtual

void getinitia() {}

public:

void fillnamedb()

};class namedba : public namedb

void setinitia()

void getinitia()

};class namedbb : public namedb

void setinitia()

void getinitia()

};int main ()

所謂的原型模式:用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。

從乙個物件再建立另外乙個可定製的物件,而且不需要知道任何建立的細節。應該注意概念中的拷貝兩個字,這是原型模式的精髓所在。原型模式實行的關鍵就是clone函式。

例子:簡歷複製,之前沒有影印機的時候,完全手寫,需要寫很多份重複的簡歷,如果簡歷有錯,改起來也是相當費勁了。後來有了印表機,在出現簡歷錯誤,只需要改乙份,之後再影印的內容就是正確的了。無論是手抄還是影印,在執行這些方法的時候肯定之前有乙份原始的初稿,故這個可以理解為原型模式

修改剛剛的**

//父類

class namedb

virtual ~namedb() {}

virtual namedb* clone()

virtual

void showname() {}

protected:

char* m_name;

};//子類

class namedba : public namedb

;namedba::namedba(const

char *str)

else

}namedba::~namedba()

namedba::namedba(const namedba &r)

namedba* namedba::clone()

void namedba::showname()

設計模式 原型 模板方法模式

定義 原型模式 prototype 用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。原型模式其實就是從乙個物件再建立另外乙個可定製的物件,而且不需要知道任何建立的細節。以簡歷 resume 影印為例。程式 如下 using system using system.collection...

設計模式C 實現(5) 原型模式 模板方法模式

軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設計模式 和 設...

設計模式C 實現(5) 原型模式 模板方法模式

分類 軟體設計模式c 實現 2011 08 11 08 38 15人閱讀收藏 舉報 軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式...