大B:“我給你舉個例子,你就可以更好在理解模板方法模式了。”
小A:“好。”
大B:“一個支持在屏幕上繪圖的類View。一個視圖只有在進入焦點狀態後時纔可以設定合適的特定繪圖狀態,因而只有成爲‘焦點’之後纔可以進行繪圖。View類強制其子類遵循這個規則。我們用Display模板方法來解決這個問題。View定義兩個具體方法,SetFocus和ResetFocus,分別設定和清除繪圖狀態。View的Dodisplay鉤子操作實施真正的繪圖功能。”
include《iostream.h》
classView
{
public:
voidDisplay()
{
//cout《“模版方法定義算法框架”《endl;
SetFocus();
Dodisplay();
ResetFocus();
}
voidSetFocus()
{
cout《“獲得焦點”《endl;
}
voidResetFocus()
{
cout《“失去焦點”《endl;
}
virtualvoidDodisplay()
{
cout《“基類繪圖函數”《endl;
}
};
classFlashView:publicView
{
public:
voidDodisplay()
{
cout《“實現falsh繪圖”《endl;
}
};
classPhotoShopView:publicView
{
public:
voidDodisplay()
{
cout《“實現photoshop繪圖”《endl;
}
};
intmain()
{
View*pview=newFlashView;
pview->Display();
pview=newPhotoShopView;
pview->Display();
return1;
}
運行結果:
獲得焦點
實現falsh繪圖
失去焦點
獲得焦點
實現photoshop繪圖
失去焦點