1、意圖
定義乙個操作中的演算法骨架,而將一些步驟延遲到子類中。templatemethod使得子類可以不改變乙個演算法的結構可重定義該演算法的某些特定步驟。
2、適用性
模板方法應用於下列情況:
1)一次性實現乙個演算法的不變的部分,並將可變的行為留給子類來實現。
2)各子類中公共的行為應被提取出來並集中到乙個公共父類中以避免**重複。識別現有**中的不同之處,並且將不同之處分離為新的操作。最後,用乙個呼叫這些新的操作的模板方法來替換這些不同的**。
3)控制子類擴充套件。模板方法只在特定呼叫「hook」操作,這樣就只允許在這些點進行擴充套件。
3、c++例項
// test.cpp : 定義控制台應用程式的入口點。
//#include "stdafx.h"
#include #include #include #include using namespace std;
// 抽象類,定義氣泡排序的骨架
class bubblesorter
for ( int nexttolast = _length - 2; nexttolast >= 0; nexttolast-- )
_operations++;
}} return _operations;
}protected:
bubblesorter()
// 留給子類實現的交換位置方法
virtual void swap( int index ) = 0;
// 留給子類實現的比較方法
virtual bool outoforder( int index ) = 0;
private:
int _operations ;
protected:
int _length ;
}; // 整型型別的冒泡演算法實現
class intbubblesorter:bubblesorter
~intbubblesorter()
int sort( int* array, int length )
_length = length;
_array = array;
// 呼叫冒泡演算法
return dosort();
}protected:
// 實現冒泡演算法中的交換操作
void swap( int index )
// 實現冒泡演算法中的比較操作
bool outoforder( int index )
private:
int *_array;
};// 浮點型別的冒泡演算法實現
class doublebubblesorter:bubblesorter
~doublebubblesorter()
int sort( double* array, int length )
_length = length;
_array = array;
// 呼叫冒泡演算法
return dosort();
}protected:
// 實現冒泡演算法中的交換操作
void swap( int index )
// 實現冒泡演算法中的比較操作
bool outoforder( int index )
private:
double *_array;
};int _tmain(int argc, _tchar* argv)
; intbubblesorter* intsorter = new intbubblesorter;
intsorter->sort( intarray, 5);
for (int i = 0 ; i < 5; i++ )
{ coutfor (int i = 0 ; i < 5; i++ )
{ cout<
設計模式 行為型 模板方法模式
定義演算法框架,將一些步驟的實現延遲至子類,就是說把實現某一些功能會有一些重複的共有的步驟,放在公共的類中,將 不同的細節由其子類實現,例如炒菜,都要切菜,放油,和炒菜,但炒不同的菜需要放不同的調味料 定義乙個抽象類,將公共的方法提取出來構建模板方法,不同的則由其子類實現 create by hji...
設計模式 行為型模式 模板方法
定義乙個操作中的演算法骨架,而將演算法的一些步驟延遲到子類中,使得子類可以不改變該演算法結構的情況下重定義該演算法的某些特定步驟。屬於類行為型模式。優點封裝了不變部分,拓展可變部分。它把認為是不變部分的演算法封裝到父類中實現,而把可變部分演算法由子類繼承實現,便於子類繼續擴充套件 在父類中提取了公共...
行為型模式 模板方法
結構圖 模式說明 1.擴充套件點在抽象類abstractclass的實現子類。2.每乙個實現子類實現一種抽象方法的演算法實現,子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。3.客戶端可以替換不同的子類實現。4.定義乙個操作的演算法骨架,而將一些步驟延遲到子類中實現,模板方法使得子類...