[设计模式] javascript 之 模板方法模式

模板方法模式说明java

定义:定义方法操做的骨架,把一些具体实现延伸到子类中去,使用得具体实现不会影响到骨架的行为步骤!this

说明:模式方法模式是一个继承跟复用的典型模式,该模式定义了一个抽象类,Abstract Class,其下定义了一个或多个模板方法,也就是顶级方法,这些方法定义行为的调度步骤,通常是调用抽象中定义的其余具体类或勾子;定义了一些抽象方法,这些方法必需要由具体子类来实现;还有可能定义了一些勾子方法,这通常是空方法,用于子类扩展。spa

模板方法模式组成:prototype

1>. 模板方法: 也叫骨架方法,定义行为调度步骤! 不能被子类修改,若是在java高级面向对象语言,通常会以 final 修饰!设计

2>. 抽象方法:待子类继承必须实现的方法;code

3>. 具体方法:用于在抽象类中的顶级实现,通常也不能被覆盖修改,通常也会加上 final 修饰!对象

4>. 勾子方法: 通常为空方法. 方法命名通常以 “do” 开头,相似于 HttpServlet 下的 doGet, doPost;blog

模板方法模式,通常用于 具备相同行为逻辑过程,但各自实现不太同样的场景,这种状况就能够采用这种模式,定义骨架,规定如何去执行,顺序、调度等,再让子类各自去实具体的行为;继承

面向对象思想,要注意它不变跟变化的因素,在模板方法模式里,行业逻辑是不变的,行为具体实现是可变的,把可变跟不可变的分离使之解藕,这符合面向对象的开闭原则;定义抽象骨架,让具体实现以子类形式去自由扩展,互不影响。开发

模板模式结构图:

实例场景:

1>. 好比不一样文件审批上呈过程,通过的人或部门是同样的,但每一个过程他的处理是不一致的;

2>. 再好比说,大学四年,不一样专业每一年所修的课本是不太同样的;

实例源码

这里以读大学四年来实现;

1. 定义抽象类;

function AbstractClass() {
    
}

AbstractClass.prototype.template = function() {
    this.FirstYear();
    this.SecondYear();
    this.ThirdYear();
    this.FourthYear();
}

AbstractClass.prototype.FirstYear = function() {
    console.log('须要重写');
}

AbstractClass.prototype.SecondYear = function() {
    console.log('须要重写');
}

AbstractClass.prototype.ThirdYear = function() {
    console.log('须要重写');
}

AbstractClass.prototype.FourthYear = function() {
    console.log('须要重写');
}

2. 定义某学生;

function Student(name) {
    this.name = name;
}

Student.prototype = AbstractClass.prototype; //继承

Student.prototype.FirstYear = function() {
    console.log(this.name+' 第一年修: 语文' );
}

Student.prototype.SecondYear = function() {
    console.log(this.name+' 第二年修: 数学' );
}

Student.prototype.ThirdYear = function() {
    console.log(this.name+' 第三年修: 英语' );
}

Student.prototype.FourthYear = function() {
    console.log(this.name+' 第四年修: 历史' );
}

3. 使用方法:

var student = new Student('陈某某');
student.template();

输出:

陈某某 第一年修: 语文

陈某某 第二年修: 数学

陈某某 第三年修: 英语

陈某某 第四年修: 历史

其余说明

面向对象中的继承,通常把行为方法置于最顶层,把状态成员,置于子类当中;关注行为,而非状态;

模板方法模式是一个常常用到的模式,体现了面向对象经典的继承跟复用特色;用于关注固定的逻辑行为,骨架方法用于封装固定的逻辑过程,开发时要提取这部分统一的过程到抽象类中去,抽象与具体的设计师分工开发时就能够不受其余影响;

关健字:模板,继承,骨架;

相关文章
相关标签/搜索