编程-设计模式 23:模板方法模式

设计模式 23:模板方法模式

定义与目的
  • 定义:模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
  • 目的:该模式的主要目的是封装算法的框架,允许子类提供具体的实现细节,而不改变算法的整体结构。
实现示例

假设我们有一个简单的游戏,玩家需要经历一系列的挑战才能通关。我们可以使用模板方法模式来实现这个需求。

// 抽象类 - 游戏
abstract class Game {
    // 模板方法
    final void play() {
        makePreparations();
        startGame();
        playGame();
        endGame();
    }

    protected void makePreparations() {
        System.out.println("Making preparations...");
    }

    protected abstract void startGame();

    protected abstract void playGame();

    protected void endGame() {
        System.out.println("Game over!");
    }
}

// 具体类 - 冒险游戏
class AdventureGame extends Game {
    @Override
    protected void startGame() {
        System.out.println("Starting adventure game...");
    }

    @Override
    protected void playGame() {
        System.out.println("Exploring dungeons, fighting monsters...");
    }
}

// 具体类 - 战略游戏
class StrategyGame extends Game {
    @Override
    protected void startGame() {
        System.out.println("Starting strategy game...");
    }

    @Override
    protected void playGame() {
        System.out.println("Building structures, training troops...");
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        Game adventureGame = new AdventureGame();
        Game strategyGame = new StrategyGame();

        System.out.println("Playing adventure game:");
        adventureGame.play();

        System.out.println("\nPlaying strategy game:");
        strategyGame.play();
    }
}
使用场景
  • 当你需要定义算法的骨架,而将一些步骤留给子类去实现时。
  • 当你需要确保一系列方法的调用顺序不变,但允许个别方法的具体实现不同。
  • 当你需要在不改变算法结构的情况下重定义算法的某些步骤时。

模板方法模式通过定义算法的骨架,并将一些步骤留给子类去实现,使得子类可以在不改变算法结构的情况下重定义算法的某些步骤。这对于需要确保一系列方法的调用顺序不变,但允许个别方法的具体实现不同的场景非常有用。

小结

模板方法模式是一种常用的行为型模式,它可以帮助你定义算法的骨架,而将一些步骤留给子类去实现。这对于需要确保一系列方法的调用顺序不变,但允许个别方法的具体实现不同的场景非常有用。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值