Saturday, 7 December 2013

Template Design pattern or Template Method Design pattern - Implementation [Building a House]

Master Java Design Patterns Easily!

Subscribe to Ram N Java for step-by-step programming guides, architecture blueprints, and real-world code examples!

🔔 Subscribe to Ram N Java

Understanding the Problem: Building Different Types of Houses

When building any house—whether a Glass House or a Wooden House—the sequence of construction remains identical:

  1. Build the foundation
  2. Build the pillars
  3. Build the walls
  4. Build the windows

While the overall sequence never changes, the materials used in each step vary. For a wooden house, you use wood coatings and wooden walls. For a glass house, you use glass coatings and glass panels.

The Template Method Solution

Instead of rewriting the construction sequence in every subclass, we define the entire workflow once inside an abstract class called HouseTemplate:

  • Template Method (buildHouse()): Declared as final so subclasses cannot alter the sequence of construction.
  • Abstract Primitive Methods: buildFoundation(), buildPillars(), buildWalls(), and buildWindows() are left abstract for subclasses to provide specific material logic.

Java Code Implementation

Here is how the template pattern structure is set up in Java:

// Abstract Template Class
public abstract class HouseTemplate {

    // Template method defining the construction sequence
    public final void buildHouse() {
        buildFoundation();
        buildPillars();
        buildWalls();
        buildWindows();
        System.out.println("House is built successfully!\n");
    }

    public abstract void buildFoundation();
    public abstract void buildPillars();
    public abstract void buildWalls();
    public abstract void buildWindows();
}

Concrete classes such as WoodenHouse and GlassHouse extend HouseTemplate and supply custom logic for building with wood or glass. The client class HousingClient simply calls buildHouse(), keeping client code simple, decoupled, and clean.

Related Tutorials from Ram N Java


Click here to watch in Youtube : https://www.youtube.com/watch?v=209srnMmADU

Click the below Image to Enlarge
Template Design pattern or Template Method Design pattern - Implementation [Building a House]

Template Design pattern or Template Method Design pattern - Implementation [Building a House] - Class Diagram
















HouseTemplate.java

public abstract class HouseTemplate
{

// Template method is final so subclasses can't override
public final void buildHouse()
{
buildFoundation();
buildPillars();
buildWalls();
buildWindows();
System.out.println("House is built.");
}

// Methods to be implemented by subclasses

public abstract void buildFoundation();

public abstract void buildPillars();

public abstract void buildWalls();

public abstract void buildWindows();

}

GlassHouse.java

public class GlassHouse extends HouseTemplate
{

@Override
public void buildFoundation()
{
System.out.println("Building foundation with cement,iron rods and sand");
}

@Override
public void buildPillars()
{
System.out.println("Building Pillars with glass coating");
}

@Override
public void buildWalls()
{
System.out.println("Building Glass Walls");
}

@Override
public void buildWindows()
{
System.out.println("Building Glass Windows");

}

}

WoodenHouse.java

public class WoodenHouse extends HouseTemplate
{

@Override
public void buildFoundation()
{
System.out.println("Building foundation with cement,iron rods,sand and wood");
}

@Override
public void buildPillars()
{
System.out.println("Building Pillars with Wood coating");
}

@Override
public void buildWalls()
{
System.out.println("Building Wooden Walls");
}

@Override
public void buildWindows()
{
System.out.println("Building Wooden Windows");

}

}

HousingClient.java

public class HousingClient
{

public static void main( String[] args )
{

System.out.println("Build a WoodenHouse\n");
HouseTemplate houseType = new WoodenHouse();

// using template method
houseType.buildHouse();
System.out.println("************************************************************");

System.out.println("Build a GlassHouse\n");
houseType = new GlassHouse();

houseType.buildHouse();
}

}

Output

Build a WoodenHouse

Building foundation with cement,iron rods,sand and wood
Building Pillars with Wood coating
Building Wooden Walls
Building Wooden Windows
House is built.
************************************************************
Build a GlassHouse

Building foundation with cement,iron rods and sand
Building Pillars with glass coating
Building Glass Walls
Building Glass Windows
House is built.


See also:



  • Template Design pattern or Template Method Design pattern - Introduction
  • Template Design pattern or Template Method Design pattern - Real Time Example [Coffee]
  • Template Design pattern or Template Method Design pattern - Real Time Example [Car]
  • Template Design pattern or Template Method Design pattern - Class Diagram
  • Template Design pattern or Template Method Design pattern - Implementation [Coffee]
  • Template Design pattern or Template Method Design pattern - KeyPoints
  • All Design Patterns Links
  • No comments:

    Post a Comment

    Tutorials