定义
我们将总结出来的行为规律固化在基类中,对具体的行为抽象化并交给子类去完成,如此便实现了子类对基类模板的复用。当然,也不需要将每个行为都抽象化,完全可以用实体方法去实现一些通用的操作。如果子类需要个性化,就对该方法进行覆写,不需要就直接继承。
代码实现
很多情况下我们玩的游戏的步骤都是,从加载游戏-》开始游戏-》提升等级-》获得游戏胜利,虽然说不同的游戏,都是这样的一个步骤,但是这个步骤中的每个环节可能存在很大的差异。我们将步骤中的这些环节抽象出来,让子类自己去实现,基类只需要控制好步骤就好
public abstract class Game {
abstract void init();
abstract void start();
public void upgrade() {
System.out.println("提升等级");
}
abstract void end();
public final void play() {
init();
start();
upgrade();
end();
}
}
LOL游戏类,实现了抽象方法
public class LoL extends Game {
@Override
void init() {
System.out.println("LOL:ban/pick阶段");
}
@Override
void start() {
System.out.println("LOL:全军出击");
}
@Override
void end() {
System.out.println("LOL:击毁地方水晶,获得胜利");
}
}
Bwlb 游戏类,实现了抽象方法
public class Bwlb extends Game {
@Override
void init() {
System.out.println("Bwlb:加载地图");
}
@Override
void start() {
System.out.println("Bwlb:出现攻击性小怪");
}
@Override
void end() {
System.out.println("Bwlb:击杀全部小怪,获得胜利");
}
}
客户端,发起请求
public class Client {
public static void main(String[] args) {
Game game = new LoL();
game.play();
game = new Bwlb();
game.play();
// LOL:ban/pick阶段
// LOL:全军出击
// 提升等级
// LOL:击毁地方水晶,获得胜利
// Bwlb:加载地图
// Bwlb:出现攻击性小怪
// 提升等级
// "Bwlb:击杀全部小怪,获得胜利
}
}
以上就是模板方法模式的所有内容,我将持续更新设计模式,欢迎大家一起交流😁