简介
模板方法模式由两部分组成,第一部分是抽象父类,第二部分是具体的实现子类。通常在抽象父类中封装了子类的算法框架,包括实现一些公共方法以及封装子类中 所有方法的执行顺序。子类通过继承这个抽象类, 也继承个整个算结构,并且可以选择重写父类的方法。
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();
模板方法模式是一种典型的通过封装变化提高系统扩展性的设计模式。运用了模板方法模式的程序中,子类方法种类和执行顺序都是不变的,但是子类的方法具体实现则是可变的。父类是个模版,子类可以添加,就增加了不同的功能。