JavaScript设计模式之模板方法模式原理与用法示例

yizhihongxing

JavaScript设计模式之模板方法模式

简介

模板方法模式(Template Method Design Pattern)又称为模板模式,是一种行为型设计模式。在该模式中,定义一个操作中的算法骨架,而将一些步骤延迟到子类中实现。也就是说,在父类中定义好算法的骨架,具体实现留给子类去实现,这样就可以保证算法的整体流程在父类中控制,所有子类遵循相同的规则去按照父类中定义好的流程去运行自身的方法。这种类型的设计模式属于行为型模式。

模式原理

模板方法模式主要由抽象模板类抽象方法和实现方法组成。

抽象模板类抽象方法定义了算法步骤的框架,包括接口和实现方法。在接口中,父类只做声明而不进行具体实现,并在实现类中必须予以实现。而在实现类继承了抽象类后,只需要补充完具体的实现(也就是覆盖模板方法中的某些抽象方法),程序即能运行。这种机制也称为“钩子”机制。

具体模板类实现抽象方法,完成算法步骤的具体实现。

用法示例

下面通过一个简单的示例来说明模板方法的用法。

  1. 假设定义了一个网站开发的模板类Website。这个类中包含一个操作的模板方法createWebsite(),用于创建一个网站。
class Website {
  constructor() {
    this.templateMethod()
  }

  templateMethod() {
    this.createDesign()
    this.createContent()
    this.createPublish()
  }

  createDesign() {
    throw new Error("The method createDesign must be implemented.");
  }

  createContent() {
    throw new Error("The method createContent must be implemented.");
  }

  createPublish() {
    throw new Error("The method createPublish must be implemented.");
  }
}

这个抽象类中,createDesign()、createContent()和createPublish()是钩子方法,需要在子类中进行实现,否则将会抛出错误。

  1. 假设现在需要创建一个博客网站和一个商业网站,它们都属于上述Website类,但不同的是,博客网站需要优先考虑内容的创建,而商业网站需要优先考虑设计。因此需要创建两个针对于不同网站的实例化子类,分别是BlogSite类和BusinessSite类。
class BlogSite extends Website {
  createDesign() {
    console.log("Blog site design created.");
  }

  createContent() {
    console.log("Blog site content created.");
  }

  createPublish() {
    console.log("Blog site published.");
  }
}

class BusinessSite extends Website {
  createDesign() {
    console.log("Business site design created.");
  }

  createContent() {
    console.log("Business site content created.");
  }

  createPublish() {
    console.log("Business site published.");
  }
}

在这里,我们为BlogSite类和BusinessSite类都重写了模板类中的三个钩子方法,并提供了各自的实现。

  1. 最后,创建BlogSite和BusinessSite的实例,并调用它们的createWebsite()方法来创建一个网站。运行代码后,能够看到两个针对不同网站的不同处理过程被顺利地执行了。
const blog = new BlogSite();
blog.createWebsite();
// 日志网站设计创建完成。
// 日志网站内容创建完成。
// 日志网站发布完成。

const business = new BusinessSite();
business.createWebsite();
// 商业网站设计创建完成。
// 商业网站内容创建完成。
// 商业网站发布完成。

在这段代码中,BlogSite和BusinessSite都被实例化了,然后调用了相应的createWebsite()方法,插槽式的模板方法将会根据实例的不同而执行不同的钩子方法。

总结

模板方法模式是一种非常优秀的设计模式,可以用来实现一个算法的骨架,让具体实现交由子类来完成。这样子就可以保证算法的整体流程在父类中控制,但子类又不失灵活性,可以根据自己的需要去完成不同的实现。

在实际的开发中,模板方法模式也可以应用在很多场景,比如在框架设计、搭建上线流程、游戏设计等方面。但在使用时要注意抽象类的设计与实现,确保模板类中的方法能够通过子类的实现达到预期的效果,避免在使用中遇到不必要的问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript设计模式之模板方法模式原理与用法示例 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 跟我学习javascript的严格模式

    接下来我将为大家详细介绍“跟我学习JavaScript的严格模式”的完整攻略。 什么是严格模式 严格模式是JavaScript的一种运行模式,通过严格模式可以对代码的执行进行限制,使代码更加严谨,减少出错的可能性。在ES5中, JavaScript引入了严格模式概念,它是一组限制 JavaScript语言的特性。在严格模式中,一些在正常模式中默许的行为,会被…

    JavaScript 2023年6月10日
    00
  • 再谈javascript注入 黑客必备!

    再谈 JavaScript 注入 黑客必备! 什么是 JavaScript 注入 JavaScript 注入是指通过在网页中插入恶意代码来实现攻击的一种手段。JavaScript 是一种广泛使用的客户端脚本语言,可以控制网页的行为并与服务器端进行交互。黑客可以通过 JavaScript 注入技术将恶意代码注入到网页中,从而控制网页的行为并实现攻击。 Java…

    JavaScript 2023年5月28日
    00
  • JavaScript中日期函数的相关操作知识

    首先需要了解JavaScript中日期函数的基本操作知识,包括日期的创建、格式化和计算等。 创建日期对象 在JavaScript中,可以使用Date对象来创建一个日期。创建方式有多种,如下所示: 使用日期字符串创建 可以使用日期字符串来创建日期对象,字符串的格式为”YYYY/MM/DD”或者”MM/DD/YYYY”等,例如: var d = new Date…

    JavaScript 2023年5月27日
    00
  • 十代酷睿的性能差异 i9-10900K/i7-10700K/i5-10600K性能对比

    十代酷睿的性能差异 i9-10900K/i7-10700K/i5-10600K性能对比 随着十代酷睿处理器的推出,消费者可以选择 i9-10900K、i7-10700K、i5-10600K 等不同的处理器型号。这些处理器具有不同的性能和价格,本文将详细讲解它们之间的性能差异。 i9-10900K i9-10900K 是十代酷睿处理器中最高端的型号,采用了 L…

    JavaScript 2023年5月28日
    00
  • JavaScript中常用的运算符小结

    JavaScript中常用的运算符小结 前言 在JavaScript的世界里,运算符无疑是最常用到的知识点之一。掌握运算符,可以让我们更加高效地完成任务。这篇文章将会概述JavaScript中常用的运算符,包括算术运算符、比较运算符、逻辑运算符和位运算符。 算术运算符 算术运算符主要用于数值运算,常见的算术运算符有加(+)、减(-)、乘(*)、除(/)和取模…

    JavaScript 2023年5月18日
    00
  • 半个小时学json(json传递示例)

    接下来我将详细介绍Markdown格式的完整攻略:半个小时学JSON(JSON传递示例)。 半个小时学JSON 什么是JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON是基于JavaScript语言的部分语法的格式,但是它是一种独立于任何语言的数据格式。 …

    JavaScript 2023年5月27日
    00
  • vue-router中的hash和history两种模式的区别

    在Vue.js中,vue-router是一个非常重要的路由库,它允许我们在单页面应用中管理导航,通过这个库我们可以轻松构建单页面应用。vue-router支持两种路由模式:hash模式和history模式。 Hash模式 hash模式的核心就在于URL中的“#”符号。在hash模式下,当URL发生变化时,页面并没有重新加载,而是触发onhashchange事…

    JavaScript 2023年6月11日
    00
  • JavaScript基础之this和箭头函数详析

    JavaScript基础之this和箭头函数详析 本文主要介绍JavaScript中的this关键字和箭头函数的使用方法和注意事项。 什么是this 在JavaScript中,this关键字代表当前执行上下文的对象。它的值是在函数执行时确定的,具体取决于函数的调用方式。 全局作用域下的this 在全局作用域下,this指向的是全局对象window。 cons…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部