模板要领形式
定义一个操纵中算法的框架,而将一些步骤延晚到子类中,使得子类能够不转变算法的构造即可重定义该算法中的某些特定步骤。
模板要领形式是编程中经常用到的形式,其异常简朴,AbstractClass叫笼统模板,其要领分为3类:
1.笼统要领:父类中只声明但不加以完成,而是定义好范例,然后由它的子类去完成。
2.模版要领:由笼统类声明并加以完成。平常来讲,模版要领挪用笼统要领来完成重要的逻辑功用,而且,模版要领大多会定义为final范例,指明重要的逻辑功用在子类中不能被重写。
3.钩子要领:由笼统类声明并加以完成。然则子类能够去扩大,子类能够经由过程扩大钩子要领来影响模版要领的逻辑。
完成类用来完成细节。笼统类中的模版要领恰是经由过程完成类扩大的要领来完成营业逻辑。
模板要领形式长处
1.轻易扩大。平常来讲,笼统类中的模版要领是不容易反生转变的部份,而笼统要领是轻易反生变化的部份,因而经由过程增添完成类平常能够很轻易完成功用的扩大,相符开闭准绳。
2.便于保护。关于模版要领形式来讲,恰是因为他们的重要逻辑雷同,才运用了模版要领。
实用场景
在多个子类具有雷同的要领,而且这些要领逻辑雷同时,能够斟酌运用模版要领形式。在顺序的主框架雷同,细节差别的场所下,也比较合适运用这类形式。
代码
//模板要领
var DP = require("./DesignPattern.js");
var AbstractCheck = (function () {
_check = function () {
this.startup();
this.speeup();
this.checkspeed();
this.brake();
this.stop();
}
return function AbstractCheck() {
DP.Interface(this, ['startup', 'speeup', 'brake', 'stop']);
this.checkspeed = function () {
console.log("默许不检测速率");
};
this.check = _check;
}
})();
function Porsche911() {
this.__proto__ = new AbstractCheck();
this.startup = function () {
console.log("检测911启动");
};
this.speeup = function () {
console.log("检测911加快");
};
this.brake = function () {
console.log("检测911刹车");
//检测要领规范
console.log("911刹车及格");
};
this.stop = function () {
console.log("检测911熄火");
}
}
function Porsche781() {
this.__proto__ = new AbstractCheck();
this.startup = function () {
console.log("检测781启动");
};
this.speeup = function () {
console.log("检测781加快");
};
this.brake = function () {
console.log("检测781刹车");
//检测要领规范
console.log("781刹车及格");
};
this.stop = function () {
console.log("检测781熄火");
};
this.checkspeed = function () {
console.log("检测781速率");
};
}
var porsche911 = new Porsche911();
var porsche781 = new Porsche781();
porsche911.check();
porsche781.check();