模板方法模式是一种行为设计模式,它在父类中定义了一个操作的算法框架,允许子类在不改变算法结构的情况下重定义算法的某些步骤
。这种模式是基于继承的
,通过抽象类将通用的代码抽取到超类中,同时通过具体类实现或者改写算法中的某些特定步骤
。
假设我们有一个Game
类,这个类定义了一个游戏的基本结构,包括初始化、开始游戏、结束游戏等步骤
。我们将使用模板方法模式来定义这些步骤的结构,同时允许子类定义这些步骤的具体实现。
class Game {
// 模板方法
play() {
this.initialize();
this.startPlay();
this.endPlay();
}
initialize() {
// 默认实现,可以被子类重写
console.log("Initializing game...");
}
startPlay() {
// 这个方法应由子类实现
throw new Error("Method 'startPlay()' must be implemented.");
}
endPlay() {
// 默认实现,可以被子类重写
console.log("Ending game...");
}
}
然后,我们可以创建具体的游戏类,它们继承自Game类并实现自己的startPlay方法
:
class Chess extends Game {
initialize() {
super.initialize();
console.log("Setting up a chess game.");
}
startPlay() {
console.log("Starting a chess game.");
}
endPlay() {
super.endPlay();
console.log("Chess game finished.");
}
}
class Soccer extends Game {
initialize() {
super.initialize();
console.log("Setting up a soccer match.");
}
startPlay() {
console.log("Starting a soccer match.");
}
endPlay() {
super.endPlay();
console.log("Soccer match finished.");
}
}
客户端代码现在可以使用这些类来玩游戏
const chess = new Chess();
chess.play(); // 使用Chess类中定义的具体方法
const soccer = new Soccer();
soccer.play(); // 使用Soccer类中定义的具体方法