Template、Strategy、Observor屬於構件協作類型的設計模式。
motivation:對於某一項任務,常常有穩定的整體操作結構,但是各個子步驟卻又很多改變的需求,或者由於固有原因無法與整體任務結構一起實現(整體穩定,局部變化)。
key interface or class:
1.library或者framework—在框架或者類庫中定義主流程,對變化的子類方法進行晚綁定;
2.application—調用者,實現變化的方法,調用主流程運行。
structure:
template codes:
//庫或者框架的實現
class library{
public:
void run(){
//穩定的主流程步驟
step1();
step2(); //支持變化,使用虛函數來說實現多態
step3();
step4(); //支持變化,使用虛函數來說實現多態
step5();
}
virtual ~library(){};
protect:
//穩定步驟
void step1(){
//...
}
void step3(){
//...
}
void step4(){
//...
}
//變化步驟
virtual void step2()=0;
virtual void step4()=0;
}
//調用者的工作
//1.繼承函數來實現變化的功能
class application: public library{
protect:
virtual void step2(){
//實現具體功能
};
virtual void step4(){
//實現具體功能
};
}
//調用主流程
int main(){
library* lib = new application();
lib->run();
delete lib;
}
summary:
1. template模式是非常基礎的設計模式,爲許多應用程序框架提供了靈活的擴展點;
2.“不要調用我,讓我來調用你”的反向控制結構;
3.在template method中調用的虛函數,可以實現也可以沒有實現(抽象方法或者純虛方法)。