模板模式
本質
固定演算法骨架
定義
定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。
用模板模式解決問題的思路
重複或者相似**太多、擴充套件不方便,出現這些問題的原因在相似模組之間的實現是完全分開的、相互獨立的,沒有從整體上進行控制。若是把它們合起來看,就會發現,那些重複或者相似的**應該被抽離出來。而不重複的就應該做成擴充套件方法,放到子類去實現。
登陸控制的示例:
根據登陸人員的編號去獲取相應資料。(必有)
獲取對登陸人員填寫的密碼資料進行加密後的資料,如果不需要加密,那就直接返回登陸人員填寫的資料。
判斷登陸人員填寫的資料是否與資料庫的資料匹配。(必有)
**:
定義乙個登陸的模板,把公共的**定義成方法在父類中實現,不同的定義成抽象方法,放到子類去實現
/*** 登陸控制模板的抽象類 **/
public
abstract
class
logintemplate
/*** 根據登陸編號查詢和獲取儲存中相應的資料
* @param 登陸編號
* @return 登陸編號儲存中相應的資料
**/public
abstract
loginmedel findloginuser(string loginid);
/*** 對密碼資料進行加密
* @param 密碼資料
* @return 加密後的密碼資料
**/public
string encryptpwd(string pwd)
/*** 判斷使用者填寫的登陸資料和儲存中對應的資料是否匹配
* @param 使用者填寫登陸資料
* @param 在儲存中對應的資料
* @return boolean
**/public
boolean match(loginmodel lm, loginmodel dblm)
}
封裝進行登陸控制所需要的資料類,可以把他們的資料合併在乙個類裡面,不同的可以在子類中擴充套件。
/*** 登陸控制的資料類**/
public
class
loginmodel
實現普通使用者的登陸邏輯
/*** 普通使用者登陸邏輯**/
public
class normallogin extends
logintemplate
}
實現工作人員登陸控制的登陸邏輯
/*** 工作人員登陸邏輯**/
public
class workerlogin extends
logintemplate
public
string encryptpwd(string pwd)
}
以上就是乙個完整的模板方法模式案例,模板模式在實際應用中非常廣泛,尤其是設計框架級功能的時候非常有用。
模板方法模式還有乙個額外的好處,就是可以控制子類的擴充套件。因為在父類中定義好了演算法的步驟,只是在某幾個固定的點才會呼叫到被子類實現的方法,因此也只允許這幾個點來擴充套件功能。
模板方法模式
有這樣乙個場景 乙個演算法或流程,它的步驟以及步驟之間的順序是固定的,但具體的某一步可能有不同的實現。對於這麼乙個場景,可以建立多個類,各個類實現不同的實現,但是這樣的缺點是 易錯 難改,易錯 應為步驟和順序是固定的,而且在每個類中都要寫一遍,程式設計師怎有心情不好的時候,就有可能把其中某一步給寫錯...
模板方法模式
模板方法模式 定義乙個演算法框架,將裡面的操作步驟推遲到子類中去執行,這樣使得子類不用改變框架,只需改變某些操作步驟方法 ifndef test h define test h include include using namespace std class test virtual test v...
模板方法模式
模板方法模式 在乙個方法中定義乙個演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變演算法結構的情況下,重新定義演算法的某些步驟。還可以使用鉤子對可選部分進行判斷。include include using namespace std class caffeinebeverage ...