定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中,使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟
定義了乙個或多個抽象操作,以便讓子類實現,這些操作叫做基本操作
定義並實現了乙個模板方法,這個模板方法一般是乙個具體方法,它給出了乙個頂級邏輯的骨架,而邏輯的組成步驟在相應的抽象操作中,推遲到子類實現
實現父類鎖定義的乙個或多個抽象方法,他們是乙個頂級邏輯的組成部分
每乙個抽象模板角色都可以由任意多個具體模板角色與之對應,而每乙個具體模板角色都可以給出這些抽象方法的不同實現,從而使得頂級邏輯的實現各不相同
以jdbc連線資料庫為例,mysql和oracle鏈結資料庫
/**
* @program: pattern
* @description: jdbc的鏈結抽象類
* @author: chengqj
* @create: 2018-07-30 18:59
**/public
abstract
class
abstractjdbctemplate
protected
abstract connection getconnection()
;protected
abstract list<
?>
parseresultset
(resultset rs)
;protected preparedstatement createpreparedstatement
(connection conn, string sql)
catch
(sqlexception e)
return null;
}protected resultset execute
(preparedstatement pstmt)
catch
(sqlexception e)
return null;
}protected
void
close
(connection conn, preparedstatement pstmt, resultset rs)
catch
(exception e)
}}
/**
* @program: pattern
* @description: mysql的資料庫鏈結實現
* @author: chengqj
* @create: 2018-07-30 19:05
**/public
class
mysqljdbctemplate
extends
abstractjdbctemplate
catch
(exception e)
return null;
}@override
protected list<
?>
parseresultset
(resultset rs)
}catch
(exception e)
return resultlist;
}}
/**
* @program: pattern
* @description: oracle連線資料庫
* @author: chengqj
* @create: 2018-07-30 19:17
**/public
class
oraclejdbctemplate
extends
abstractjdbctemplate
catch
(exception e)
return null;
}@override
protected list<
?>
parseresultset
(resultset rs)
}catch
(exception e)
return resultlist;
}}
具體細節步驟實現定義在子類中,子類定義詳細處理演算法是不會改變演算法整體結構
每個不同的實現都需要定義乙個子類,會導致類的個數增加,系統更加龐大
模板設計模式 設計模式 模板方法模式
在模板模式 template pattern 中,乙個抽象類公開定義了執行它的方法的方式 模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。首先需要一定抽象的定義,沒有具體的實現,但是在抽象類的行為中,子類去程序這個抽象類,重寫抽象方法,實現不...
模板設計模式 設計模式之模板模式
模板模式,通常又叫做模板方法模式,乙個抽象類公開定義了執行方法的模板,它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方法進行,這種型別的設計模式屬於行為型模式。模板模式主要解決將通用的演算法抽象起來,同樣的 邏輯出現了重複,就可以使用模板模式進行重構。關鍵 在抽象類實現,其他步驟在子類實現...
設計模式 模板設計模式
1 抽象類 abstractclass類中實現了模板方法 template 定義了演算法的骨架,具體子類需要去實現,抽象方法operationr2,3,4 template operationr2,3,4可以是抽象方法,也可以是實現方法 如果是抽象方法,需要到子類實現即可 2 實現類 concret...