欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 设计模式-模板模式

设计模式-模板模式

2024/10/24 15:22:39 来源:https://blog.csdn.net/qq_34574204/article/details/139954533  浏览:    关键词:设计模式-模板模式

简介

模板方法模式是一种行为设计模式,它在父类中定义了一个操作的算法框架,允许子类在不改变算法结构的情况下重定义算法的某些步骤。这种模式是基于继承的,通过抽象类将通用的代码抽取到超类中,同时通过具体类实现或者改写算法中的某些特定步骤

核心思想

  • 定义模板结构:在超类中定义一个模板方法,这个方法将各个步骤的执行顺序固定下来,形成一个框架。
  • 延迟到子类实现:将一些步骤的具体实现延迟到子类中,使得子类可以在不改变算法结构的条件下改变这些步骤的行为。

使用场景

  • 当多个类中存在共同的行为,且这些行为在高层算法中的顺序已经确定,但各个步骤的具体实现可能不同时。
  • 当需要控制子类扩展的点时,模板方法只在特定点调用“钩子”操作,这样就只允许在这些点进行扩展

具体实现

假设我们有一个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类中定义的具体方法

总结

  • 模板方法模式在JavaScript中可以用来定义一个操作中的算法骨架,同时允许子类提供某些步骤的具体实现。
  • 这种模式可以帮助我们将复杂类的通用行为抽象化,同时提供足够的灵活性来在子类中定义特定的行为。
  • 这种方法很适合用于定义框架或库的基本功能,同时允许用户通过继承来扩展或修改这些功能。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com