DEV Community

Prashant Mishra
Prashant Mishra

Posted on

Template

The template is one of the behavioral design patterns, an abstract class defines a set of ways/templates to execute its methods.

Its subclasses can override/implement these methods but the invocation is to be in the same way as defined by an abstract class

Let's understand this with an example:

Key concepts
Template: An abstract class defining the structure/way/template of the algorithm
Concrete Implementation: ConcreteImplementation of Template
Client: Client that will make use of this Template

public abstract class GameTemplate{
    //these below methods can be overridden based on the type of game
    public abstract void initialize();
    public abstract void startPlay();
    public abstract void  endPlay();

    //All the subclasses must use this same method to play the game i.e. following the same template present in this method,
    //Hence it is declared as final.
    public final void play(){
        initialize();
        startPlay();
        endPlay();
    }
}

public class Cricket extends GameTemplate{


    @Override
    public void initialize(){
        System.out.println("Cricket has been initialized");
    }
    @Override
    public void startPlay(){
        System.out.println("Cricket game has been started");
    }
    @Override
    public void endPlay(){
        System.out.println("Cricket game has ended");
    }

}

public class Football extends GameTemplate{

    @Override
    public void initialize(){
        System.out.println("Football has been initialized");
    }
    @Override
    public void startPlay(){
        System.out.println("Football game has been started");
    }
    @Override
    public void endPlay(){
        System.out.println("Football game has ended");
    }

}

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

        //Create a football game object 
        GameTemplate football = new Football();
        football.play();// play() will strictly follow the sequence of method execution defined in the final play() method

        GameTemplate cricket = new Cricket();
        cricket.play();
    }
}

Enter fullscreen mode Exit fullscreen mode

Output:

Football has been initialized
Football game has been started
Football game has ended
Cricket has been initialized
Cricket game has been started
Cricket game has ended
Enter fullscreen mode Exit fullscreen mode

note: The code follows all the design principles like LSP, ISP, SRP, OCP

Top comments (0)