Template methed
生活随笔
收集整理的這篇文章主要介紹了
Template methed
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
從目的來看
- 創建型(Creational)模式:將對象的部分創建工作 延遲到子對象類或者其他對象,從而應對需求變化為對象創建具體實現類型引來的沖擊。
- 結構性(Structural)模式:通過類繼承或者對象組合獲得靈活的類結構,從而應對需求變化為對象的結構帶來的沖擊。
- 行為型(Behavioral 模式):通過類繼承和對象組合來明確類與對象的責任,從而應對需求變化為多個交互對象的沖擊
從范圍來看:
- 類模型處理類和子類的動態關系
- 對象模式處理對象間的動態關系
從封裝變化角度對模式分類
重構的關鍵技法
- 靜態 → 動態
- 早綁定 → 晚綁定
- 繼承 → 組合
- 編譯時依賴 → 運行時依賴
- 緊耦合 → 松耦合
?
“組件協作”模式
? ?現代軟件專業分工之后第一個結果是“框架與應用程序”的huagen,“組件協議”模式通過晚期綁定,來實現框架與應用程序之間的松耦合,是兩者之間協作時常用的模式。
典型模型:
- Template Method
- Stategy
- Observer / Event
Template Method
動機(Motivation):
在軟件構建過程中,對于某一項任務,它常常有穩定的整體結構,但各個子步驟卻又很多改變的需求,或者由于固有關系的原因(比如框架和應用之間的關系)而無法和任務的整體結構同步。
? ? ? ? ? ? ?如何在確定穩定操作結構的前提下,來靈活應對各個子步驟的變化或者晚期實現需求?
Code
常用的書寫代碼的方式
Library.cpp
//程序庫開發人員 class Library { public:void Step1(){//...}void Step2(){//...}void Step3(){//...} };Application.cpp
//應用程序開發人員 class Application { public:bool Step2(){//...}void Step4() {//...} };int main() {Library lib();Application app();lib.step1();if (app.Step2()) {lib.Step3;}for (int i = 0; i < 4; i++){app.Step();}lib.Step5(); }使用Template Methed的代碼
Library.cpp
class Library { public://穩定 template methodvoid Ren() {Step 1 (); if (Step2()) { //支持變化 ==>虛函數的多態 Step3(); } for (int i = 0; i < 4; i++) { Step4(); //支持變化 ==>虛函數的多態 } Step5(); } virtual ~Library(){} protected: void Step1() { //穩定 //... } void Step2() //穩定 { //... } void Step3() { //穩定 //... } virtual bool Step2()=0;//變化 virtual bool Step4()=0;//變化 };APPlication.cpp
//應用程序開發人員 class Application: public Library { protected:virtual bool Step2() {//子類重寫實現}virtual bool Step3() {//子類重寫實現} };int main() {Library* pLib = new Application();pLib->run();delete pLib; }模式定義
定義一個操作中的算法的骨架(穩定),而將一些步驟延遲(變化)到子類中。Template Method使得子類可以不改變(復用)一個算法的結構即可重定義該算法的某些特定步驟。
UML圖
?
轉載于:https://www.cnblogs.com/malloc1free/p/11087999.html
總結
以上是生活随笔為你收集整理的Template methed的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue开发搭建(npm安装 + vue脚
- 下一篇: 撰写新闻的心得体会