[設計模式] 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();

輸出:

陳某某 第一年修: 語文

陳某某 第二年修: 數學

陳某某 第三年修: 英語

陳某某 第四年修: 歷史

其餘說明

面向對象中的繼承,通常把行爲方法置於最頂層,把狀態成員,置於子類當中;關注行爲,而非狀態;

模板方法模式是一個常常用到的模式,體現了面向對象經典的繼承跟複用特色;用於關注固定的邏輯行爲,骨架方法用於封裝固定的邏輯過程,開發時要提取這部分統一的過程到抽象類中去,抽象與具體的設計師分工開發時就能夠不受其餘影響;

關健字:模板,繼承,骨架;

相關文章
相關標籤/搜索