Template Method tasarım deseni, üst sınıflarda bir algoritma iskeleti tanımlamamızı ve alt sınıfların algoritma iskeleti yapısını bozmadan belirli adımları yeniden tanımlamasını (override) sağlayan tasarım desenidir.
Yazdığımız metotun (ki buradaki metot uml diyagramındaki TemplateMetot oluyor) davranışı, içerisindeki adımları bazı durumlara göre farklılık gösterebilmektedir. Bu farklılıkları sağlayan adımları, metotları soyutlarayak bir alt sınıfın kendince uyarlamasını sağlamaya yarar bu tasarım deseni.
Aşağıda bu tasarım desenine ait UML diyagramı bulunmaktadır.
AbstractClass: Alt sınıfların uygulaması için oluşturulmuştur, metot iskeletimizi ve soyutlanmış diğer metotları içerir. Soyut sınıfımızdır, arayüz de olabilir.
ConcreteClasss:AbstractClass sınıfından türer. Soyutlanmış metotları kendince tanımlanmasını sağlar.
Senaryo olarak geçen haftanın verilerinin analizinin yapılıp en sonda da bizlere bir çıktı, rapor verilğini düşünelim. Burada rapor verme süreçleri farklılık gösterebilir. Örneğin; XML formatında da bir rapor hazırlanabilir ya da HTML formatında da.
C# Kod Örneği:
// Metot iskeletimizi ve soyutlanmış metotları içermektedir.// UML diyagramındaki AbstractClass yapısına denk gelmektedir.abstractclassDataAnalyzerBase{ // Metot iskeletimiz.publicvoidAnalyzeDataOfLastWeek() {object data =GetDataOfLastWeek();object result =AnalyzeData(data);ExportResult(result); }privateobjectGetDataOfLastWeek() { // Burada veri verinin çağrılma süreçleri yer alacaktır. // Default olarak bir obje dönülmektedir.Console.WriteLine("Method worked: GetDataOfLastWeek");returnnewobject(); }privateobjectAnalyzeData(object data) { // Burada verinin analizi süreci yer almaktadır. // Analiz sonuçları default olarak bir obje dönmektedir.Console.WriteLine("Method worked: AnalyzeData");returnnewobject(); } // Alt sınıflar tarafından uygulanmasını istediğimiz metottur. // Metot iskeleti içerisinde farklılık gösterecek olan metotumuzdur.publicabstractvoidExportResult(object result);