当前位置: 首页 > news >正文

好程序员web前端教程分享js模板模式

什么是模板模式?

模板模式是抽象父类定义了子类需要重写的相关方法。 而这些方法,仍然是通过父类方法调用的。 根据描述,“模板”的思想体现在:父类定义的接口方法。 除此之外,子类方法的调用,也是被父类控制的。

应用场景

一些系统的架构或者算法骨架,由“BOSS”编写抽象方法,具体的实现,交给“小弟们”实现。 而绝对是不是用“小弟们”的方法,还是看“BOSS”的心情。 不是很恰当的比喻哈~

ES6 实现

Animal是抽象类,Dog和Cat分别具体实现了eat()和sleep()方法。 Dog或Cat实例可以通过live()方法调用eat()和sleep()。

注意:Cat和Dog实例会被自动添加live()方法。不暴露live()是为了防止live()被子类重写,保证父类的控制权。

class Animal {
constructor() {

// this 指向实例
this.live = () => {
  this.eat();
  this.sleep();
};

}

eat() {

throw new Error("模板类方法必须被重写");

}

sleep() {

throw new Error("模板类方法必须被重写");

}
}

class Dog extends Animal {
constructor(...args) {

super(...args);

}
eat() {

console.log("狗吃粮");

}
sleep() {

console.log("狗睡觉");

}
}

class Cat extends Animal {
constructor(...args) {

super(...args);

}
eat() {

console.log("猫吃粮");

}
sleep() {

console.log("猫睡觉");

}
}

/ 以下为测试代码 */

// 此时, Animal中的this指向dog
let dog = new Dog();
dog.live();

// 此时, Animal中的this指向cat
let cat = new Cat();
cat.live();
好程序员web前端分享

相关文章:

  • MySQL判断字段是否为null
  • 数据结构--第四章串、数组和广义表总结
  • 九九乘法-杨辉三角-质数
  • RDS管理控制台如何手机备份MySQL数据库?
  • Jmeter分布式测试的各种坑之jmeter-server修改ip
  • JavaScript作用域相关的总结
  • 为什么SaaS软件集成是未来的必然趋势?
  • 华奥延保对代码的理解(华奥延保)
  • 《代码敲不队》第一次作业:团队亮相
  • HashMap 与 HashSet 联系
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • python游戏开发:59行代码编写飞扬的独眼鸟
  • isilon SMB 控制允许IP访问
  • D35 876. Middle of the Linked List
  • 前端常用的缓存技术
  • [笔记] php常见简单功能及函数
  • 【347天】每日项目总结系列085(2018.01.18)
  • echarts花样作死的坑
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • Linux各目录及每个目录的详细介绍
  • python 装饰器(一)
  • Travix是如何部署应用程序到Kubernetes上的
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 聊聊directory traversal attack
  • 你不可错过的前端面试题(一)
  • 鱼骨图 - 如何绘制?
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 正则表达式-基础知识Review
  • ​批处理文件中的errorlevel用法
  • ​虚拟化系列介绍(十)
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #ubuntu# #git# repository git config --global --add safe.directory
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (14)Hive调优——合并小文件
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (搬运以学习)flask 上下文的实现
  • (笔试题)分解质因式
  • (笔试题)合法字符串
  • (二十三)Flask之高频面试点
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (四)鸿鹄云架构一服务注册中心
  • (转)ORM
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .Net的DataSet直接与SQL2005交互
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .NET委托:一个关于C#的睡前故事
  • .NET学习全景图