在模板模式中,抽象类公开定义的方式/模板以执行其方法.它的子类可以根据需要覆盖方法实现,但调用的方式与抽象类的定义相同.此模式属于行为模式类别.
我们将创建一个 Game 抽象类,用于定义操作模板方法设置为final,以便不能覆盖它. Cricket 和 Football 是扩展 Game 并覆盖其方法的具体类.
TemplatePatternDemo ,我们的演示类,将使用 Game 来演示模板模式的使用.
使用最终的模板方法创建一个抽象类.
Game.java
public 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(); } }
创建扩展上述类的具体类.
Cricket.java
public 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!"); } }
Football.java
public 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!"); } }
使用游戏的模板方法play()演示了一种定义的游戏方式.
TemplatePatternDemo.java
public class TemplatePatternDemo { public static void main(String[] args) { Game game = new Cricket(); game.play(); System.out.println(); game = new Football(); game.play(); }}
验证输出.
Cricket Game Initialized! Start playing. Cricket Game Started. Enjoy the game! Cricket Game Finished! Football Game Initialized! Start playing. Football Game Started. Enjoy the game! Football Game Finished!