Design Pattern #8: Template Method Pattern

These are my notes about the book "Headfirst Design Patterns"


Make coffee and tea.

abstract class CaffeineBeverage{
  def prepare: Unit ={
    hook // hook

  def boilWater:Unit = println("boil water")
  def brew:Unit
  def pourInCup:Unit = println("pour in cup")
  def addCondiments:Unit
  def hook:Unit = {} // "hook": for optional part of algorithm

class Coffee extends CaffeineBeverage{

  def brew = println("brewing coffee")

  def addCondiments = println("add sugar")

class Tea extends CaffeineBeverage{

  def brew = println("brewing tea")

  def addCondiments = println("add lemon")


  • Defines the steps(aka "template") of an algorithm and allow subclass to provide the implementation of one or more steps.
  • Keep algorithm's structure unchanged.
  • Encapsulate algorithms
  • vs Strategy: strategy = encapsulates interchangeable behaviors and use delegation to decide which behavior to use. In strategy, the class that's composed implements the entire algorithm. While in the template pattern, the algorithm is incomplete without subclass' implementation.
  • Great design for creating frameworks.
  • Factory Method pattern is a special case of Template Method Pattern.

Design principle

  • Don't call us, we'll call you.

  • Allow low level components to hook themselves into a system, but the high level components determine when they're needed, and how.


Comments powered by Disqus