当前位置: 首页 > 科技观察

面试官:说说你对模板方法模式的理解?应用场景?

时间:2023-03-20 19:56:30 科技观察

1.什么是模板模式(TemplatePattern),一个抽象类公开定义了执行其方法的方式/模板,其子类可以根据需要重写该方法,但是调用会在抽象类中进行这设计模式的类型是在行为模式中定义的,由两部分组成:抽象父类:封装了子类的算法框架,包括一些公共方法的实现和封装在子类中的所有方法的执行顺序。类:通过继承这个抽象类,也就继承了整个算法,并且可以选择重写父类的方法。2.例如,您现在需要泡一杯茶和咖啡。流程如下:无论是茶还是咖啡,都有共同的步骤:开水,同点开水+原料(区别,咖啡,茶)倒入杯中,同点加入调味料(区别:糖和牛奶,柠檬)可以抽象出一个父类来继续制作饮料的过程,代码如下:classBeverage{init(){this.boilWater();this.brew();this.pourInCup();this.addCondiments();}boilWater(){console.log('烧开水');}brew(){thrownewError('子类必须覆盖brew方法');}pourInCup(){thrownewError('子类必须覆盖pourInCup方法');}addCondiments(){thrownewError('子类必须覆盖addCondiments方法');}}所以制作咖啡可以重写父类的方法,如下:classCoffee{brew(){console.log('用开水冲泡咖啡');}pourInCup(){console.log('将咖啡倒入thecup');}addCondiments(){console.log('sugarandmilk');}}在上面的过程中,Beverage.prototype.init是一个模板方法,里面封装了子类的算法框架,它作为算法模板。知道哪些子类以何种顺序执行哪些方法3、应用场景是构建一系列UI组件。这些组件的构建过程大致如下:初始化一个div容器,通过ajax请求拉取响应数据,渲染到div容器中。完成组件的构建,并通知用户组件已经渲染完成。因此,这四个步骤可以抽象到父类的模板方法中。顺便提供一下第一步和第四步的具体实现。当子类继承父类时,只需要重写模板方法中的第二步和第三步即可使用模板方法模式。自己的控制,而是父类通知子类。作为一个子类,它只负责提供一些设计细节。在传统的编程语言中,子类的方法类型和执行顺序保持不变。我们把这部分逻辑抽象到父类中,而子类的方法是具体的。如何实现它是可变的。通过重写父类的方法,将变化的逻辑部分封装到子类中。通过添加新的子类,我们可以为系统添加新的功能。我不需要修改父类。而其他的子类,同样符合开闭原则在javascript中,我们不需要照样实现模板方法模式,因为高阶函数是更好的选择参考https://refactoringguru.cn/design-patterns/template-methodhttps://zhuanlan.zhihu.com/p/129248167https://juejin.cn/post/6844903615476269064