——基于继承的设计模式

抽象类

模版方法模式是一种严重依赖抽象类的模式,因此这种设计模式可以说是js做出让步下对java的模仿。
在js中,依然通过prototype来实现继承的效果,但就目前的业务来说,基本用不上。。。

钩子方法hook

模版方法是一种接近上层框架的设计模式,前端框架不管是react还是vue都具备生命周期方法,这些生命周期方法就是对变化的高度抽象(这个我暂时还描述不清楚,但是有这个感觉)。
放置钩子是隔离变化的常见手段,钩子的执行结果来控制程序的走向,程序就十分灵活了。

好莱坞原则

下级组件不能调用上级组件,子类的调用完全由父类决定。

  1. // 不使用原型继承来实现模板方法模式
  2. var Beverage=function(params){ // 看起来像是基于高阶函数来实现了继承
  3. var boilWater=function(){}
  4. var brew=params.brew||function(){} // 抽象子类的重写方法行为
  5. var pourInCup=params.pourInCup||function(){}
  6. var F=function(){}
  7. F.prototype.init=function(){
  8. boilWater()
  9. brew()
  10. pourInCup()
  11. }
  12. return F
  13. }
  14. var Coffee=Beverage({
  15. brew:function(){},
  16. pourInCup:function(){},
  17. ...
  18. })
  19. var coffee=new Coffee()
  20. coffee.init()

在js中,高阶函数是实现继承的更好选择。