鍍金池/ 教程/ HTML/ 模板方法模式
備忘錄模式
解釋器模式
類似 Python 的 zip 函數(shù)
類變量和實例變量
提示參數(shù)
指數(shù)對數(shù)運算
檢查變量的類型是否為數(shù)組
由數(shù)組創(chuàng)建一個字符串
生成隨機數(shù)
刪除數(shù)組中的相同元素
大寫單詞首字母
雙向服務(wù)器
類的混合
計算復(fù)活節(jié)的日期
轉(zhuǎn)換弧度和度
找到上一個月(或下一個月)
雙向客戶端
橋接模式
嵌入 JavaScript
AJAX
觀察者模式
克隆對象(深度復(fù)制)
一個隨機整數(shù)函數(shù)
清理字符串前后的空白符
歸納數(shù)組
平方根倒數(shù)快速算法
適配器模式
打亂數(shù)組中的元素
將數(shù)組連接
使用數(shù)組來交換變量
更快的 Fibonacci 算法
服務(wù)器
服務(wù)端和客戶端的代碼重用
客戶端
查找子字符串
策略模式
CoffeeScrip 的 type 函數(shù)
由數(shù)組創(chuàng)建一個對象詞典
回調(diào)綁定
工廠方法模式
映射數(shù)組
當函數(shù)括號不可選
生成可預(yù)測的隨機數(shù)
不使用 jQuery 的 Ajax 請求
把字符串轉(zhuǎn)換為小寫形式
類方法和實例方法
擴展內(nèi)置對象
定義數(shù)組范圍
MongoDB
匹配字符串
創(chuàng)建一個不存在的對象字面值
列表推導(dǎo)
比較范圍
修飾模式
檢測每個元素
拆分字符串
字符串插值
對象數(shù)組
去抖動函數(shù)
使用 Nodeunit 測試
SQLite
單件模式
篩選數(shù)組
替換子字符串
數(shù)組最大值
計算(美國和加拿大的)感恩節(jié)日期
找到一個月中的最后一天
計算兩個日期中間的天數(shù)
基本的 HTTP 服務(wù)器
把字符串轉(zhuǎn)換為大寫形式
使用 HTML 命名實體替換 HTML 標簽
For 循環(huán)
模板方法模式
重復(fù)字符串
使用 Jasmine 測試
對象的鏈式調(diào)用
數(shù)學(xué)常數(shù)
反轉(zhuǎn)數(shù)組
計算月球的相位
使用 Heregexes
查找子字符串
生成器模式
遞歸函數(shù)
HTTP 客戶端
創(chuàng)建 jQuery 插件
檢測與構(gòu)建丟失的函數(shù)
生成唯一ID
命令模式

模板方法模式

問題

定義一個算法的結(jié)構(gòu),作為一系列的高層次的步驟,使每一個步驟的行為可以指定,使屬于一個族的算法都具有相同的結(jié)構(gòu)但是有不同的行為。

解決方案

使用模板方法( Template Method )在父類中描述算法的結(jié)構(gòu),再授權(quán)一個或多個具體子類來具體地進行實現(xiàn)。

例如,想象你希望模擬各種類型的文件的生成,并且每個文件要包含一個標題和正文。

class Document
    produceDocument: ->
        @produceHeader()
        @produceBody()

    produceHeader: ->
    produceBody: ->

class DocWithHeader extends Document
    produceHeader: ->
        console.log "Producing header for DocWithHeader"

    produceBody: ->
        console.log "Producing body for DocWithHeader"

class DocWithoutHeader extends Document
    produceBody: ->
        console.log "Producing body for DocWithoutHeader"

docs = [new DocWithHeader, new DocWithoutHeader]
doc.produceDocument() for doc in docs

討論

在這個實例中,算法用兩個步驟來描述文件的生成:其一是產(chǎn)生文件的標題,另一步是生成文件的正文。父類中是實現(xiàn)每一個步驟的空的方法,多態(tài)性使得每一個具體的子類可以通過重寫一步步的方法來實現(xiàn)對方法不同的利用。在本實例中,DocWithHeader 實現(xiàn)了正文和標題的步驟, DocWithoutHeader 只是實現(xiàn)了正文的步驟。

不同類型文件的生成就是簡單的將文檔對象存儲在一個數(shù)組中,簡單的遍歷每個文檔對象并調(diào)用其 produceDocument 方法的問題。