javascript 之 模板方法模式

來源:互聯網
上載者:User

模板方法模式說明

定義:定義方法操作的骨架,把一些具體實現延伸到子類中去,使用得具體實現不會影響到骨架的行為步驟!

說明:模式方法模式是一個繼承跟複用的典型模式,該模式定義了一個抽象類別,Abstract Class,其下定義了一個或多個模板方法,也就是頂級方法,這些方法定義行為的調度步驟,一般是調用抽象中定義的其他具體類或勾子;定義了一些抽象方 法,這些方法必須要由具體子類來實現;還有可能定義了一些勾子方法,這一般是空方法,用於子類擴充。

模板方法模式組成:

1>. 模板方法: 也叫骨架方法,定義行為調度步驟! 不能被子類修改,如果在java進階物件導向語言,一般會以 final 修飾!

2>. 抽象方法:待子類繼承必須實現的方法;

3>. 具體方法:用於在抽象類別中的頂級實現,一般也不能被覆蓋修改,一般也會加上 final 修飾!

4>. 勾子方法: 一般為空白方法. 方法命名一般以 “do” 開頭,類似於 HttpServlet 下的 doGet, doPost;

模板方法模式,一般用於 具有相同行為邏輯過程,但各自實現不太一樣的情境,這種情況就可以採用這種模式,定義骨架,規定如何去執行,順序、調度等,再讓子類各自去實具體的行為;

物件導向思想,要注意它不變跟變化的因素,在模板方法模式裡,行業邏輯是不變的,行為具體實現是可變的,把可變跟不可變的分離使之解藕,這符合物件導向的開閉原則;定義抽象骨架,讓具體實現以子類形式去自由擴充,互不影響。

模板模式結構圖:

執行個體情境:

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();

輸出:

陳某某 第一年修: 語文

陳某某 第二年修: 數學

陳某某 第三年修: 英語

陳某某 第四年修: 曆史

其他說明

物件導向中的繼承,一般把行為方法置於最頂層,把狀態成員,置於子類當中;關注行為,而非狀態;

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



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.