首先设计一个抽象基类,基类中可以有已经实现不允许修改的final方法,有可以需要子类各自实现的方法,也可以有允许子类修改已经实现的方法,再设计几个子类继承该基类,设计一个客户端主类即可。
抽象基类:
package com.freshbin.pattern.template.game;
/**
* 游戏抽象类
*
* @author freshbin
* @date 2019-1-7 19:58:37
*/
public abstract class Game {
public final void play() {
initialize();
startPlay();
endPlay();
}
abstract void initialize();
abstract void startPlay();
abstract void endPlay();
}
子类:
package com.freshbin.pattern.template.game;
/**
* 游戏类
*
* @author freshbin
* @date 2019-1-7 19:58:37
*/
public class GloryOfKingGame extends Game{
public void initialize() {
System.out.println("GloryOfKingGame 进入游戏!");
}
public void startPlay() {
System.out.println("路上的抢野,打野的抢兵,辅助负责送人头!");
}
public void endPlay() {
System.out.println("五人躺泉水喷队友,乞求对面快点推!");
}
}
package com.freshbin.pattern.template.game;
/**
* LOL游戏类
*
* @author freshbin
* @date 2019-1-7 19:58:37
*/
public class LOLGame extends Game{
public void initialize() {
System.out.println("LoLGame 进入游戏!");
}
public void startPlay() {
System.out.println("各自分路愉快游戏!");
}
public void endPlay() {
System.out.println("五人抱团推爆地方水晶获得胜利!");
}
}
客户端主类:
package com.freshbin.pattern.template;
import com.freshbin.pattern.template.game.Game;
import com.freshbin.pattern.template.game.GloryOfKingGame;
import com.freshbin.pattern.template.game.LOLGame;
/**
* 模板方法模式
*
* @author freshbin
* @date 2019-1-7 19:57:56
*/
public class TemplatePatternDemo {
public static void main(String[] args) {
Game lolGame = new LOLGame();
lolGame.play();
System.out.println("===========================");
Game gloryOfKingGame = new GloryOfKingGame();
gloryOfKingGame.play();
}
}
效果截图: