Design Pattern: Template Method Pattern in Java

Template Method pattern is used to implement a process where subclasses can change some steps of the parent.

Check complete details and explanations about Template Method pattern in the article: Template Method Design Pattern

This article demonstrates Template Method pattern implementations in Java. Check the following examples.

Example #1: Transport Builder

Let’s consider an example of a transport builder.

Transport Abstract Class

// Transport.java

package com.bigboxcode.designpattern.templatemethod.transport;

public abstract class Transport {
    abstract void createBody();

    abstract void addEngine();

    abstract void addWheel();

    // Required only for Plane
    abstract void addWing();

    private void addSeat() {
        // Add seats to the vehicle

        // Adding seats are same for all transports so same functions for all

        System.out.println("Adding seats");
    }

    private void paint() {
        System.out.println("Painting");
    }

    public void build() {
        createBody();

        addEngine();

        addWheel();

        addWing();

        addSeat();

        paint();
    }
}

Car Transport Class

// Car.java

package com.bigboxcode.designpattern.templatemethod.transport;

public class Car extends Transport {
    @Override
    void createBody() {
        System.out.println("Creating Car Body");
    }

    @Override
    void addEngine() {
        System.out.println("Adding Engine to Car");
    }

    @Override
    void addWheel() {
        System.out.println("Adding 4 Wheels to Car");
    }

    @Override
    void addWing() {
        // Not required for Car
    }
}

Bike Transport Class

// Bike.java

package com.bigboxcode.designpattern.templatemethod.transport;

public class Bike extends Transport {
    @Override
    void createBody() {
        System.out.println("Creating Bike Body");
    }

    @Override
    void addEngine() {
        System.out.println("Adding Engine to Bike");
    }

    @Override
    void addWheel() {
        System.out.println("Adding 2 Wheels to Bike");
    }

    @Override
    void addWing() {
        // Not required for Bike
    }
}

Plane Transport Class

// Plane.java

package com.bigboxcode.designpattern.templatemethod.transport;

public class Plane  extends Transport {
    @Override
    void createBody() {
        System.out.println("Creating Plane Body");
    }

    @Override
    void addEngine() {
        System.out.println("Adding Engine to Plane");
    }

    @Override
    void addWheel() {
        System.out.println("Adding 3 Wheels to Plane");
    }

    @Override
    void addWing() {
        System.out.println("Adding Wings Plane");
    }
}

Train Transport Class

// Train.java

package com.bigboxcode.designpattern.templatemethod.transport;

public class Train extends Transport {
    @Override
    void createBody() {
        System.out.println("Creating Train Body");
    }

    @Override
    void addEngine() {
        System.out.println("Adding Engine to Train");
    }

    @Override
    void addWheel() {
        System.out.println("Adding Wheels to Train");
    }

    @Override
    void addWing() {
        // Not required for Train
    }
}

Demo

package com.bigboxcode.designpattern.templatemethod.transport;

public class Demo {
    public static void main(String[] args) {

        Transport car = new Car();
        car.build();

        Transport plane = new Plane();
        plane.build();
    }
}

Output

Creating Car Body
Adding Engine to Car
Adding 4 Wheels to Car
Adding seats
Painting


Creating Plane Body
Adding Engine to Plane
Adding 3 Wheels to Plane
Adding Wings Plane
Adding seats
Painting

Source Code

Use the following link to get the source code:

Leave a Comment