设计模式之模板方法模式

定义

我们将总结出来的行为规律固化在基类中,对具体的行为抽象化并交给子类去完成,如此便实现了子类对基类模板的复用。当然,也不需要将每个行为都抽象化,完全可以用实体方法去实现一些通用的操作。如果子类需要个性化,就对该方法进行覆写,不需要就直接继承。

代码实现

很多情况下我们玩的游戏的步骤都是,从加载游戏-》开始游戏-》提升等级-》获得游戏胜利,虽然说不同的游戏,都是这样的一个步骤,但是这个步骤中的每个环节可能存在很大的差异。我们将步骤中的这些环节抽象出来,让子类自己去实现,基类只需要控制好步骤就好

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:击杀全部小怪,获得胜利
    }
}

以上就是模板方法模式的所有内容,我将持续更新设计模式,欢迎大家一起交流😁

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值