抽象类
模版方法模式是一种严重依赖抽象类的模式,因此这种设计模式可以说是js做出让步下对java的模仿。
在js中,依然通过prototype来实现继承的效果,但就目前的业务来说,基本用不上。。。
钩子方法hook
模版方法是一种接近上层框架的设计模式,前端框架不管是react还是vue都具备生命周期方法,这些生命周期方法就是对变化的高度抽象(这个我暂时还描述不清楚,但是有这个感觉)。
放置钩子是隔离变化的常见手段,钩子的执行结果来控制程序的走向,程序就十分灵活了。
好莱坞原则
下级组件不能调用上级组件,子类的调用完全由父类决定。
// 不使用原型继承来实现模板方法模式
var Beverage=function(params){ // 看起来像是基于高阶函数来实现了继承
var boilWater=function(){}
var brew=params.brew||function(){} // 抽象子类的重写方法行为
var pourInCup=params.pourInCup||function(){}
var F=function(){}
F.prototype.init=function(){
boilWater()
brew()
pourInCup()
}
return F
}
var Coffee=Beverage({
brew:function(){},
pourInCup:function(){},
...
})
var coffee=new Coffee()
coffee.init()
在js中,高阶函数是实现继承的更好选择。