Careeroza
Template Method Pattern
Fixed Steps, Custom Details
An abstract class defines the order of steps in a final method. Subclasses fill in individual steps. Frameworks like Spring use this pattern a lot (e.g. JdbcTemplate).
Example
public class Main {
public static void main(String[] args) {
new CsvReport().generate();
System.out.println();
new PdfReport().generate();
}
}
abstract class Report {
final void generate() { // the template: order cannot change
loadData();
format();
save();
}
private void loadData() {
System.out.println("Loading sales data");
}
abstract void format(); // step decided by subclass
void save() { // hook with a default
System.out.println("Saved to /reports");
}
}
class CsvReport extends Report {
@Override void format() { System.out.println("Formatting as CSV"); }
}
class PdfReport extends Report {
@Override void format() { System.out.println("Formatting as PDF with charts"); }
@Override void save() { System.out.println("Uploaded PDF to cloud storage"); }
}Output
Loading sales data Formatting as CSV Saved to /reports Loading sales data Formatting as PDF with charts Uploaded PDF to cloud storage