秋雨
首页
  • HTML
  • CSS
  • JavaScript
设计模式
webpack
  • 前端常识
  • ES
  • React
  • Redux
  • ReactRouter
  • 事件循环
  • 浏览器渲染流程
  • Vue项目性能优化
  • Vue
  • App
Github
首页
  • HTML
  • CSS
  • JavaScript
设计模式
webpack
  • 前端常识
  • ES
  • React
  • Redux
  • ReactRouter
  • 事件循环
  • 浏览器渲染流程
  • Vue项目性能优化
  • Vue
  • App
Github
  • 构造器模式
  • 原型链模式
  • 工厂模式
  • 抽象工厂模式
  • 建造者模式
  • 单例模式
  • 装饰器模式
  • 适配器模式
  • 适配器模式
  • 代理模式
  • 观察者模式
  • 发布订阅模式
  • 模块模式
  • 桥接模式
  • 组合模式
  • 命令模式
  • 命令模式
  • 迭代器模式
  • 职责链模式

简介

模板方法模式由两部分组成,第一部分是抽象父类,第二部分是具体的实现子类。通常在抽象父类中封装了子类的算法框架,包括实现一些公共方法以及封装子类中 所有方法的执行顺序。子类通过继承这个抽象类, 也继承个整个算结构,并且可以选择重写父类的方法。

ES5

var F = function () {};

F.prototype.init = function () {
  this.getData();
  this.render();
};

F.prototype.getData = function () {
  console.log("getData");
};
F.prototype.render = function () {
  console.log("render");
};

new F().init();

ES6

const Container = function (params = {}) {
  var F = function () {};

  F.prototype.init = function () {
    var list = this.getData();
    this.render(list);
  };

  F.prototype.getData =
    params.getData ||
    function () {
      throw new Error("必须传入getData");
    };
  F.prototype.render = function (list) {
    console.log("render", list);
  };
  return F;
};

var Myclass = Container({
  getData() {
    console.log("获取nowplaying");
    return [1, 2, 3];
  },
});
new Myclass().init();

var Myclass2 = Container({
  getData() {
    console.log("获取comongsoon");
    return [1, 2, 3];
  },
});
new Myclass2().init();

模板方法模式是一种典型的通过封装变化提高系统扩展性的设计模式。运用了模板方法模式的程序中,子类方法种类和执行顺序都是不变的,但是子类的方法具体实现则是可变的。父类是个模版,子类可以添加,就增加了不同的功能。

最后更新:
贡献者: Mrlishizhen
Prev
命令模式
Next
迭代器模式