Template Method Pattern – definirea scheletului unui algoritm

  • Doru Bulubasa
  • 21 January 2026

Template Method este un behavioral pattern care definește scheletul unui algoritm într-o clasă de bază, lăsând anumite etape ale algoritmului să fie implementate sau personalizate de clasele derivate.

👉 Ideea-cheie: structura algoritmului rămâne fixă, dar pașii pot varia.

Este extrem de util atunci când:

  • ai mai multe variante ale aceluiași proces,

  • vrei să eviți duplicarea codului,

  • vrei să impui o ordine clară de execuție.


Când folosim Template Method?

✔ Procese standardizate (ex: import date, generare rapoarte, workflow-uri)

✔ Framework-uri și librării (ASP.NET, NUnit, etc.)

✔ Când vrei control asupra fluxului, dar flexibilitate în implementare


Structura pattern-ului

  • Abstract Class

    • definește metoda TemplateMethod()

    • implementează pașii comuni

    • declară metode abstracte sau virtuale pentru pașii variabili

  • Concrete Classes

    • implementează pașii specifici


Exemplu real: procesarea unui raport

Să presupunem că avem mai multe tipuri de rapoarte:

  • raport PDF

  • raport Excel

Fluxul este același:

  1. Validare date

  2. Generare conținut

  3. Salvare raport


Implementare C#

Clasa abstractă (Template)

public abstract class ReportGenerator
{
    // Template Method
    public void GenerateReport()
    {
        ValidateData();
        GenerateContent();
        SaveReport();
    }

    protected virtual void ValidateData()
    {
        Console.WriteLine("Validare date raport...");
    }

    protected abstract void GenerateContent();

    protected virtual void SaveReport()
    {
        Console.WriteLine("Salvare raport...");
    }
}

👉 Observă:

  • GenerateReport() NU este virtual → nu poate fi schimbat fluxul

  • doar pașii sunt extensibili


Implementare concretă – PDF

public class PdfReportGenerator : ReportGenerator
{
    protected override void GenerateContent()
    {
        Console.WriteLine("Generare conținut PDF...");
    }

    protected override void SaveReport()
    {
        Console.WriteLine("Salvare raport PDF...");
    }
}


Implementare concretă – Excel

public class ExcelReportGenerator : ReportGenerator
{
    protected override void GenerateContent()
    {
        Console.WriteLine("Generare conținut Excel...");
    }
}


Utilizare

class Program
{
    static void Main()
    {
        ReportGenerator pdfReport = new PdfReportGenerator();
        pdfReport.GenerateReport();

        Console.WriteLine();

        ReportGenerator excelReport = new ExcelReportGenerator();
        excelReport.GenerateReport();
    }
}


Output

Validare date raport...
Generare conținut PDF...
Salvare raport PDF...

Validare date raport...
Generare conținut Excel...
Salvare raport...


Hook methods (opțional)

Poți introduce hook methods — metode virtuale goale, care pot fi suprascrise, dar nu sunt obligatorii.

protected virtual bool ShouldSendNotification()
{
    return false;
}


Avantaje

✅ elimină duplicarea codului

✅ impune o structură clară

✅ ușor de extins

✅ ideal pentru framework-uri


Dezavantaje

⚠ moștenire rigidă

⚠ prea multe override-uri pot complica designul

⚠ schimbările în clasa de bază pot afecta toate implementările


Template Method vs Strategy

Template Method

Strategy

Moștenire

Compoziție

Flux fix

Algoritm complet interschimbabil

Control central

Flexibilitate maximă

👉 Dacă vrei ordine fixă, folosește Template Method

👉 Dacă vrei algoritmi complet diferiți, folosește Strategy


Concluzie

Template Method Pattern este ideal atunci când:

  • ai un proces bine definit,

  • vrei extensibilitate controlată,

  • construiești aplicații .NET scalabile și curate.

Scrie un comentariu

Adresa de mail nu va fi publicata. Campurile obligatorii sunt marcate cu *