Java Tutorial/Design Pattern/Template Pattern
Demo code for Template pattern
<source lang="java">
abstract class ApplicationFramework {
public ApplicationFramework() { templateMethod(); // Dangerous! } abstract void customize1(); abstract void customize2(); final void templateMethod() { for (int i = 0; i < 5; i++) { customize1(); customize2(); } }
} class MyApp extends ApplicationFramework {
void customize1() { System.out.print("Hello "); } void customize2() { System.out.println("World!"); }
} public class TemplateMethod {
public static void main(String args[]) { MyApp app = new MyApp(); }
}</source>
Template pattern with abstract class
<source lang="java">
public class TestTemplate {
public static void main(String args[]) { Car automotiveRobot = new Car("Automotive"); Cooker cookieRobot = new Cooker("Cook"); automotiveRobot.go(); cookieRobot.go(); }
} class Cooker extends Machine {
private String name; public Cooker(String n) { name = n; } public void getParts() { System.out.println("Getting a flour and sugar...."); } public void assemble() { System.out.println("Baking a cookie...."); } public void test() { System.out.println("Crunching a cookie...."); } public String getName() { return name; }
} class Car extends Machine {
private String name; public Car(String n) { name = n; } public void getParts() { System.out.println("Getting a carburetor...."); } public void assemble() { System.out.println("Installing the carburetor...."); } public void test() { System.out.println("Revving the engine...."); } public String getName() { return name; }
} abstract class Machine {
public final void go() { start(); getParts(); assemble(); test(); stop(); } public void start() { System.out.println("Starting...."); } public void getParts() { System.out.println("Getting parts...."); } public void assemble() { System.out.println("Assembling...."); } public void test() { System.out.println("Testing...."); } public void stop() { System.out.println("Stopping...."); }
}</source>