DEV Community

Cover image for Template Method Pattern in Java
Matheus Bernardes Spilari
Matheus Bernardes Spilari

Posted on

Template Method Pattern in Java

The Template Method pattern is a behavioral design pattern that defines the skeleton of an algorithm in a base class but lets subclasses override specific steps of the algorithm without changing its structure. This pattern is widely used in frameworks and libraries where code reusability and standardized processes are essential.

How the Template Method Pattern Works

The Template Method pattern consists of:

  1. Abstract Class: Defines the template method, which contains the algorithm structure and calls abstract or hook methods.
  2. Concrete Classes: Implement specific steps of the algorithm by overriding abstract methods.

Here’s an example of the Template Method pattern in Java using beverages:

abstract class BeveragePreparation {
    // Template method
    public final void prepareBeverage() {
        boilWater();
        brew();
        pourIntoCup();
        addCondiments();
    }

    private void boilWater() {
        System.out.println("Boiling water");
    }

    private void pourIntoCup() {
        System.out.println("Pouring into cup");
    }

    abstract void brew(); // Step to be implemented by subclasses
    abstract void addCondiments(); // Step to be implemented by subclasses
}

class Tea extends BeveragePreparation {
    @Override
    void brew() {
        System.out.println("Steeping the tea");
    }

    @Override
    void addCondiments() {
        System.out.println("Adding lemon");
    }
}

class Coffee extends BeveragePreparation {
    @Override
    void brew() {
        System.out.println("Dripping coffee through filter");
    }

    @Override
    void addCondiments() {
        System.out.println("Adding sugar and milk");
    }
}

public class TemplateMethodExample {
    public static void main(String[] args) {
        BeveragePreparation tea = new Tea();
        tea.prepareBeverage();

        System.out.println();

        BeveragePreparation coffee = new Coffee();
        coffee.prepareBeverage();
    }
}
Enter fullscreen mode Exit fullscreen mode

Expected Output:

Boiling water
Steeping the tea
Pouring into cup
Adding lemon

Boiling water
Dripping coffee through filter
Pouring into cup
Adding sugar and milk
Enter fullscreen mode Exit fullscreen mode

Advantages of the Template Method Pattern

  • Code Reusability: Reduces code duplication by defining a common structure for algorithms.
  • Encapsulation: Hides the specific steps of an algorithm, exposing only the necessary ones to subclasses.
  • Enforces Consistency: Ensures that the algorithm follows a standard structure across multiple implementations.

Disadvantages of the Template Method Pattern

  • Limited Flexibility: The overall algorithm structure is fixed, which can make it hard to adapt to changes.
  • Increased Maintenance Effort: Modifications to the template method can impact all subclasses.
  • Difficult to Understand: If there are too many abstract methods or hooks, the pattern can make the code more complex.

Common Use Cases

The Template Method pattern is frequently used in:

  • Frameworks and Libraries: Many UI and data processing libraries use this pattern to standardize operations.
  • Game Development: Managing game loops and AI behavior often follows the template method approach.
  • Testing Frameworks: JUnit, for instance, uses this pattern to define test execution steps.
  • Persistence Layers: ORM tools like Hibernate use template methods for database operations.

Conclusion

The Template Method pattern is a powerful technique to structure algorithms while allowing flexibility for specific implementations. It is especially useful when working with frameworks and libraries where a common process needs to be enforced but individual steps vary. However, it should be used judiciously to avoid unnecessary complexity.

By understanding its strengths and limitations, you can leverage the Template Method pattern to create maintainable and scalable software solutions in Java.


📍 Reference

💻 Project Repository

👋 Talk to me

Image of Docusign

Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more