Template Pattern



The Template Method defines the steps of an algorithm and allows
subclasses to provide the implementation for one or more steps


The Template Method Pattern defines the skeleton of an algorithm in a method, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the
algorithm’s structure.


Example

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
public abstract class Vehicle {
 final void haveRide(){
  info();
  pourFood();
  start();
  passengers();
  gearIt();
  run();
  stop();
 } 
 abstract public void info();
 public void pourFood(){
  System.out.println("Pouring Food");
 } 
 public void start(){
  System.out.println("Starting");
 } 
 public void stop(){
  System.out.println("Stop\n\n");
 }
 abstract public void passengers();
 abstract public void gearIt();
 abstract public void run();
}
==========
public class Bike extends Vehicle{
 @Override
 public void passengers() {
  System.out.println("2 passengers");
 }

  @Override
 public void gearIt() {
  System.out.println("Now gearing");
 }

  @Override
 public void run() {
  System.out.println("Running with 80km/hr");
  
 }

  @Override
 public void info() {
  System.out.println("I am Bike.");
 }
}
==========
public class Car extends Vehicle{
 @Override
 public void info() {
  System.out.println("I am Car.");
 }

  @Override
 public void passengers() {
  System.out.println("5 Passengers.");
 }

  @Override
 public void gearIt() {
  System.out.println("I am Automatic car.\nI have only one reverse gear.");
 }

  @Override
 public void run() {
  System.out.println("Running with 140km/hr");
 }
}
==========
public class TemplateFlight {
 public static void main(String[] args){
  Bike bike = new Bike();
  bike.haveRide();
  
  Car car = new Car();
  car.haveRide();
 }
}