Tutorials Design Patterns in C#

Template Method Pattern — Complete Guide

Template Method Pattern — Complete Guide: free step-by-step lesson with examples, common mistakes, and interview tips — part of Design Patterns in C# on Toolliyo Academy.

On this page

Design Patterns in C# · Lesson 22 of 69

Template Method Pattern

GoF Core ✓EnterpriseCloud & Craft

Enterprise · 2 — App patterns · ~6 min · Module 3: Behavioral Design Patterns

What is this?

Template Method defines an algorithm skeleton in a base class; subclasses override steps without changing the sequence.

Why should you care?

ShopNest “import catalog” always validate → transform → save, but CSV vs Excel differ in parse details.

See it live — copy this example

Paste into a C# console or class library project and run dotnet run.

public abstract class CatalogImport
{
    public void Run(string path)
    {
        var rows = Parse(path);
        rows = Transform(rows);
        Save(rows);
    }
    protected abstract List<string> Parse(string path);
    protected virtual List<string> Transform(List<string> rows) => rows;
    protected abstract void Save(List<string> rows);
}
public sealed class CsvCatalogImport : CatalogImport
{
    protected override List<string> Parse(string path) => new() { "HD-100", "HD-200" };
    protected override void Save(List<string> rows) => Console.WriteLine($"saved {rows.Count}");
}

new CsvCatalogImport().Run("a.csv");

Run Example »

Edit the code below and click Run to see the result in Toolliyo’s live editor.

Code
Result

What happened?

  • Run is the template.
  • CsvCatalogImport fills Parse/Save.
  • Transform has a default.
  • Prefer composition if inheritance gets awkward.

Practice next

  1. Run CSV import.
  2. Add ExcelCatalogImport.
  3. Override Transform to uppercase SKUs.
  4. Add a BeforeSave hook.
  5. Log each step in Run.

Remember

Fixed algorithm steps. Override hooks. Shared sequence.

ShopNest catalog import

CSV/Excel importers share validate→save flow.

Outcome: New formats override parse only.

Interview prep for this lesson

Practice these questions aloud after reading—each links to a full structured answer.

Mid PDF Detailed
Add Methods for Removing Components:?
Short answer: The Directory class currently only has an Add() method for adding components. It could be improved by adding a Remove() method to allow for the dynamic removal of files or subdirectories. Real-world example…
Mid PDF Detailed
Abstract Factory (LoggerFactory):?
Short answer: The LoggerFactory class defines a factory method CreateLogger that returns an ILogger object. This is a generic interface for creating various logger types without specifying the concrete class directly. Re…
Mid PDF Detailed
Redo Functionality:?
Short answer: You can extend the system by adding redo functionality. After an undo operation, you could store the undone command in a separate stack and allow users to redo the previous undo operation. Real-world exampl…
Mid PDF Detailed
Abstract Expression (IExpression):?
Short answer: The IExpression interface declares an Interpret method, which is the core of the interpreter pattern. This method is used to interpret and evaluate expressions. public interface IExpression Example code { i…
Mid PDF Detailed
Mediator (ChatMediator):?
Short answer: The mediator manages communication between the users. It maintains a list of all users and broadcasts messages to all other users when one user sends a message. This keeps the users from directly knowing ab…
Questions on this lesson 0

Sign in to ask a question or upvote helpful answers.

No questions yet — be the first to ask!

Design Patterns in C#
Course syllabus

Design Patterns in C# Tutorial

Module 1: Creational Design Patterns
Module 2: Structural Design Patterns
Module 3: Behavioral Design Patterns
Module 4: Enterprise Design Patterns
Module 5: Modern Enterprise Patterns
Module 6: Microservices & Cloud Patterns
Module 7: ASP.NET Core Architecture Patterns
Module 8: Interview & System Design
Toolliyo Assistant
Ask about tutorials, ebooks, training, pricing, mentor services, and support. I use public site content only—not admin or internal tools.

care@toolliyo.com

Need callback? Share your details