专栏首页YuanXin设计模式 - 模板模式 - JavaScript

设计模式 - 模板模式 - JavaScript

模板模式是:抽象父类定义了子类需要重写的相关方法。并且这些方法,仍然是通过父类方法调用的。

专注前端与算法的系列干货分享。 引用请声明:xxoo521.com | 「公众号:心谭博客」

什么是模板模式?

模板模式是:抽象父类定义了子类需要重写的相关方法。并且这些方法,仍然是通过父类方法调用的。

根据描述,父类提供了“模板”并决定是否调用,子类进行具体实现。

应用场景

一些系统的架构或者算法骨架,由“BOSS”编写抽象方法,具体的实现,交给“小弟们”实现。

而用不用“小弟们”的方法,还是看“BOSS”的心情。

多语言实现

ES6 实现

Animal是抽象类,DogCat分别具体实现了eat()sleep()方法。

DogCat实例可以通过live()方法调用eat()sleep()

注意CatDog实例会被自动添加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();

参考

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 剑指offer - 复杂链表的复制 - JavaScript

    题目描述:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的 head。(注意...

    心谭博客
  • React组件通信解决方案

    最近在做 react 开发的时候,需要在多级组件之间进行有效通信。这里所说的多级组件,可能是父子组件、兄弟组件,还可能是两个完全不相关的组件。

    心谭博客
  • 【剑指offer:和为s的两个数字】双指针

    题目描述:输入一个递增排序的数组和一个数字 s,在数组中查找两个数,使得它们的和正好是 s。如果有多对数字的和等于 s,则输出任意一对即可。

    心谭博客
  • 在北京看场雪为什么这么难?

    打开某度,搜索“北京历史天气”,随便打开了一个网站(注意避开广告),发现从2011年到昨天的北京历史天气都可以查询到。

    朱小五
  • 聊聊base62与tinyURL

    base64大家肯定是很熟悉了,那base62是什么东东,它常被用来做短url的映射。

    codecraft
  • python机器学习及实践学习笔记1-如何打开ipynb后缀文件

    需要安装ipython notebook,如果你已经安装Anaconda软件,则不需要安装。如果未安装Anaconda,则需要安装,在控制台里输入:

    拓荒者
  • 学术资讯 | 优Tech分享-浅谈DToF技术原理

    苹果公司在3月18日发布新款ipad pro等产品,基于新搭载的DToF激光雷达,有望将AR应用效果的精确度、流畅性提高到新的级别,同时可以降低设备功耗。国内的...

    优图实验室
  • 模仿安卓源码,手写过时的方法兼容低版本

    我们经常会使用getColor(R.color.XXX)获取颜色的资源文件,但是在安卓6.0开始,这个方法被标注为过时,推荐使用两个参数的方法替代,如下图所示:

    AWeiLoveAndroid
  • 在线诊断神器Arthas使用指南

    Arthas 是基于 Greys 进行二次开发的全新在线诊断工具,利用Java6的Instrumentation特性,动态增强你所指定的类,获取你想要到的信息,...

    黄泽杰
  • [重磅报告] 波士顿咨询:零售银行在互联网下的生存法则(附下载)

    大数据文摘

扫码关注云+社区

领取腾讯云代金券