package com.interview.design.pattern.behavioral;
/**
* Created_By: stefanie
* Date: 14-12-3
* Time: 下午2:52
*
* In Template pattern, an abstract class exposes defined way(s)/template(s) to execute its methods.
* Its subclasses can overrides the method implementations as per need basis but the invocation is to be
* in the same way as defined by an abstract class.
*
* 模板方法模式,就是指:一个抽象类中,有一个主方法,再定义1...n个方法,可以是抽象的,也可以是实际的方法,
* 定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用
*/
public class TemplatePattern {
static abstract class Game {
abstract void initialize();
abstract void startPlay();
abstract void endPlay();
//template method
public final void play(){
//initialize the game
initialize();
//start game
startPlay();
//end game
endPlay();
}
}
static class Cricket extends Game {
@Override
void endPlay() {
System.out.println("Cricket Game Finished!");
}
@Override
void initialize() {
System.out.println("Cricket Game Initialized! Start playing.");
}
@Override
void startPlay() {
System.out.println("Cricket Game Started. Enjoy the game!");
}
}
static class Football extends Game {
@Override
void endPlay() {
System.out.println("Football Game Finished!");
}
@Override
void initialize() {
System.out.println("Football Game Initialized! Start playing.");
}
@Override
void startPlay() {
System.out.println("Football Game Started. Enjoy the game!");
}
}
public static void main(String[] args) {
Game game = new Cricket();
game.play();
System.out.println();
game = new Football();
game.play();
}
}