Template Method Design Pattern in Java

Read full article

Template Method design pattern

  1. Standardize the skeleton of an algorithm in a base class “template” method
  2. Common implementations of individual steps are defined in the base class
  3. Steps requiring peculiar implementations are “placeholders” in base class
  4. Derived classes can override placeholder methods
  5. Derived classes can override implemented methods
  6. Derived classes can override and “call back to” base class methods
abstract class Generalization {
   // 1. Standardize the skeleton of an algorithm in a "template" method
   public void findSolution() {
      stepOne();
      stepTwo();
      stepThr();
      stepFor();
   }
   // 2. Common implementations of individual steps are defined in base class
   protected void stepOne() { System.out.println( "Generalization.stepOne" ); }
   // 3. Steps requiring peculiar impls are ";placeholders" in the base class
   abstract protected void stepTwo();
   abstract protected void stepThr();
   protected void stepFor() { System.out.println( "Generalization.stepFor" ); }
}

abstract class Specialization extends Generalization {
   // 4. Derived classes can override placeholder methods
   // 1. Standardize the skeleton of an algorithm in a "template" method
   protected void stepThr() {
      step3_1();
      step3_2();
      step3_3();
   }
   // 2. Common implementations of individual steps are defined in base class
   protected void step3_1() { System.out.println( "Specialization.step3_1" ); }
   // 3. Steps requiring peculiar impls are "placeholders" in the base class
   abstract protected void step3_2();
   protected void step3_3() { System.out.println( "Specialization.step3_3" ); }
}

class Realization extends Specialization {
   // 4. Derived classes can override placeholder methods
   protected void stepTwo() { System.out.println( "Realization   .stepTwo" ); }
   protected void step3_2() { System.out.println( "Realization   .step3_2" ); }
   // 5. Derived classes can override implemented methods
   // 6. Derived classes can override and "call back to" base class methods
   protected void stepFor() {
      System.out.println( "Realization   .stepFor" );
      super.stepFor();
}  }

class TemplateMethodDemo {
   public static void main( String[] args ) {
      Generalization algorithm = new Realization();
      algorithm.findSolution();
}  }
Generalization.stepOne Realization .stepTwo Specialization.step3_1 Realization .step3_2 Specialization.step3_3 Realization .stepFor Generalization.stepFor

List of Template Method examples

C# examples

C++ examples

Delphi examples

Java examples

PHP examples

Design Patterns

contents