高频面试题:泡茶中的模板设计模式(拓展原型式面向对象)

前言-何为模板设计

泡茶是一门精髓,取水,洗杯,投茶,倒茶,奉茶,品茶。哇!好茶。咳咳,扯远了。

在这里插入图片描述

其实这题主要是考察我们在面对确定步骤时,进行的模板设计

模板设计模式(Template Pattern)是一种行为设计模式:它定义了一个操作中的算法的骨架,并将具体实现延伸到子类中。模板方法使得子类可以不改变算法的结构即可重新定义算法的某些特定步骤。

在泡茶的是程中,我们可以将整个流程视为一个模板方法。设想一个Tea抽象类,它定义了泡茶的基本步骤作为模板方法,而具体的茶叶种类(如绿茶、红茶)则通过继承这个抽象类并重写特定步骤来实现多样性。例如,不同的茶叶可能需要不同的水温或浸泡时间,这些差异可以通过子类中的实现细节来调整,而不改变泡茶的整体流程框架

JavaScript中,并不存在传统的抽象类概念,因为JavaScript是一门基于原型的语言,而不是基于类的语言。JavaScript中的对象是通过原型链来继承属性和方法的,而不是通过类。

原型式面向对象

这里我将简单举个例子
这个例子里面我定义了一个对象方法Tea

function Tea(type) {
        this.type = type;
        console.log("您准备泡一杯" + this.type);
}
Tea.prototype.boilWater =function(){
    console.log("煮开水ing");
}
var greenTea =new Tea("绿茶");
greenTea.boilWater();

上面这个例子里面greenTea能直接调用boilWater()方法是因为在JavaScript中,prototype是对象继承属性和方法的一种机制。每个JavaScript对象都有一个内置的prototype属性,它是一个指向另一个对象的引用,这个对象被称为“原型对象”。继承者拥有通过原型链继承的所有属性和方法,使得继承者可以访问这些属性和方法,而不需要在自身上定义它们。

知道了通过原型对象来创建统一的泡茶流程框架

泡茶步骤(模板设计方式)

    Tea.prototype.boilWater = function () {
        console.log("把水煮沸");
    }
    Tea.prototype.steepTeaBag = function () {
        console.log("用沸水浸泡茶叶");
    }
    Tea.prototype.pourInCup = function () {
        console.log("把茶水倒进杯子");
    }
    Tea.prototype.addLemon = function () {
        console.log("加柠檬");
    }
    Tea.prototype.tasteTea = function () {
        console.log("品茶");
    }

当我们需要泡任意的茶时,我们需要创建一个茶的实例。例如下面我将泡两杯茶一杯绿茶一杯红茶

var greenTea =new Tea("绿茶");
greenTea.boilWater();
greenTea.steepTeaBag();
greenTea.pourInCup();
greenTea.addLemon();
greenTea.tasteTea();
var blackTea =new Tea("红茶");
blackTea.boilWater();
blackTea.steepTeaBag();
blackTea.pourInCup();
blackTea.addLemon();
blackTea.tasteTea();

我们可以清楚的发现当,步骤较多时,我们每一个实例变量都需要调用所有的泡茶步骤方法。此时,我们面对这种多个的步骤方法时候,我们应该进行封装封装多个步骤的方法在设计模式中被称为“模板方法模式”

Tea.prototype.init =function(){
        this.boilWater();
        this.steepTeaBag();
        this.pourInCup();
        this.addLemon();
        this.tasteTea();
}

在上面的这段代码中,我们将多个步骤封装到一个主方法中的模式,通常被称为“初始化方法”或“启动方法”。在这个例子中,init方法充当了泡茶过程的入口点或初始化器。当创建Tea的实例后,可以调用init方法来执行一系列的操作,从而完成泡茶的过程。

有小伙伴可能不太懂this的意思,这里大概说一下,this可以理解为,谁正在调用这个方法,this就是指向谁。

总结

模板设计模式这种模式在面向对象编程中很常见,它有助于简化对象的创建和使用,因为客户端代码只需要调用一个方法就可以执行一系列复杂的操作,而不必单独调用每个步骤,可以减轻代码的复用率和提高可维护性。这个在面试中也是常考题,希望对大家还有所帮助。

喜欢的话,就点个赞吧>_<.

  • 18
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绯雨934

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值