1、現象分析
全國各個大、中、國小都有早上讓學生出操的習慣。常常有部分同學不願意出動,經常缺席早操早鍛煉。是以,教務處每天都要實施早操點名彙報制度。
一個學校往往有多個年級、年級裡有多個班。當各班班長清點完人數後,向上司彙報人數時的格式基本一樣,即:
XXX班有多少人,實到多少人,未到多少人,XXX班長YYY,報到完畢!
2、模闆方法模式在學生出操點名的應用
可以考慮利用模闆方法,将其實作。
UML圖如下:

如圖1,基類CClassInfo中定義了三個方法:
ReportRegistInfoTemplate()是一個模式方法,用來調用所定義的虛方法;
GetGradeNum()和ShowReporterName()是兩個虛方法,必須由派生類進行實作。
案例代碼如下:
運作效果如下:
圖2 出操情況彙報
在main()函數中調用時,我們隻是重複使用了下面的語句
CClassInfo classInfo = new CGrade1ClassInfo(1, 80, 78);
classInfo.ReportRegistInfoTemplate();
根據不同的對象,建立不同的執行個體,再通過大家統一的模闆方法接口:
public void ReportRegistInfoTemplate()
{
Console.WriteLine(" {0}年級 {1}班:總人數{2}人,實到人數{3}人,{4}人未到。",
GetGradeNum(),this.CassNo,this.TotalStuNumber,this.ActualPreset,
(this.TotalStuNumber-this.ActualPreset));
this.ShowReporterName();
}
進而避免了大量重複(相似)的方法在派生類中多次實作的問題。
上面案例印證了下面的觀點:
模闆方法模式通過把不變行為搬移到超類,去除子類中的重複代碼。
<b>案例源碼</b>