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.

🤖 Întreabă AI despre acest articol

AI Răspuns generat de AI pe baza acestui articol.
AI scrie răspunsul…

Scrie un comentariu

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