Template pattern is to provide a constructure on complicated process completion steps, leave detail implementation of each step on concrete class, so the application will base on different operator to complete the function differently but in same sequence and process.
Template Pattern sounds like facade pattern, but the difference is, the details implementation will be introduced in concrete class for template pattern, but there's no concrete class for facade pattern, the implementation will be handled when function is decleared.
Define template on cook process
public abstract class CookTemplate {
abstract void step1();
abstract void step2();
public void cook(){
System.out.println("Begin....");
step1();
step2();
System.out.println("End....");
}
}
Implementation details will be introduced in concrete class
public class Chef extends CookTemplate {
@Override
void step1() {
System.out.println("Skills are excellent.");
}
@Override
void step2() {
System.out.println("Very tasty.");
}
}
public class Normal extends CookTemplate{
@Override
void step1() {
System.out.println("Skills are just okay.");
}
@Override
void step2() {
System.out.println("Can eat.");
}
}
In the end, we can base on different object to complete the function differently but within same procedure
public static void main(String[] args) {
CookTemplate chef = new Chef();
chef.cook();
System.out.println("=======================-");
CookTemplate normal = new Normal();
normal.cook();
}