我们将创建一个定义操作的 Game 抽象类,其中,模板方法设置为 final,这样它就不会被重写。Cricket 和 Football 是扩展了 Game 的实体类,它们重写了抽象类的方法。
TemplatePatternDemo,我们的演示类使用 Game 来演示模板模式的用法。
3.1 步骤 1
创建一个抽象类,它的模板方法被设置为 final。 Game.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
public abstract class Game {
public abstract void initialize(); public abstract void startPlay(); public abstract void endPlay();
//模板 public final void play(){ //初始化游戏 initialize(); //开始游戏 startPlay(); //结束游戏 endPlay(); }
}
3.2 步骤 2
创建扩展了上述类的实体类 Cricket.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
public class Cricket extends Game {
@Override public void endPlay() { System.out.println("Cricket Game Finished!"); }
@Override public void initialize() { System.out.println("Cricket Game Initialized! Start playing."); }
@Override public void startPlay() { System.out.println("Cricket Game Started. Enjoy the game!"); } }
Football.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
public class Football extends Game {
@Override public void endPlay() { System.out.println("Football Game Finished!"); }
@Override public void initialize() { System.out.println("Football Game Initialized! Start playing."); }
@Override public void startPlay() { System.out.println("Football Game Started. Enjoy the game!"); }
}
四、测试
使用 Game 的模板方法 play() 来演示游戏的定义方式。
4.1 编写测试类
TemplatePatternDemo.java
1 2 3 4 5 6 7 8 9 10 11 12
public class TemplatePatternDemo {
public static void main(String[] args) {
Game game = new Cricket(); game.play(); System.out.println(); game = new Football(); game.play(); }
}
4.2 执行程序,输出结果
1 2 3 4 5 6 7 8 9 10
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! Disconnected from the target VM, address: '127.0.0.1:5046', transport: 'socket'