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();
}
}
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
note: The code follows all the design principles like LSP, ISP, SRP, OCP
Top comments (0)