模板方式模式也是比較好理解的設計模式之一,結合實際例子理解,在飲料實際製作過程中,大體上會分為如下幾個大的步驟:1、加原料,2、燒水,3、加水,4、加工,5、混合。無非就是這幾個步驟,但是針對第一步和第四步中加入的原料和工序不同,也會產生不同的飲料。其實這就是模板模式的一種型別。下面給出模板模式的官方介紹——定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法模式使得子類可以不改變乙個演算法的結構,即可重定義該演算法的結果。
其結構圖異常的簡單如下所示:
spring中常用的jdbctemplate,其中用到了模板模式,但是如果想要理解模板模式,這個利用jdbctemplate顯得有點大才小用,這裡還是用乙個比較簡單的例項來理解模板模式。
例項類圖如下:比較好理解,這裡就不贅述了
其中的drinkproduce算是提供了乙個模板,其中addorginal方法和makedrink方法都是抽象的方法,其實現交給了子類milkproduce和coffeeproduce來完成。client是測試類。下面給出每乙個類的**
drinkproduce
public abstract class drinkproduce
//第三步:燒水
public void boilwater()
//第四步:加工
public abstract void makedrink();
//第五步:混合
public void getdrink()
}
mikeproduce
public class milkproduce extends drinkproduce
@override
public void makedrink()
}
coffeeproduce
public class coffeeproduce extends drinkproduce
@override
public void makedrink()
}
client 測試類:
public class client
}
執行結果如下:
當我們要完成在某一細節層次一致的乙個過程或一系列步驟,但其個別步驟在更詳細的層次上的實現可能不同時,我們通常考慮模板方法模式來處理。
其實模板模式只是在一定程度上完成了解耦的操作,當不變的和可變的行為在方法的子類實現中混合在一起的時候,不變的行為就會在子類中重複出現。我們通過模板方法模式把這些行文搬移到單一的地方(就是提取公有部分,抽象成抽象方法),這樣就幫助子類擺脫重複的不變行為的糾纏。(出自大話設計模式)
再回到之前所說的,spring中的jdbctemplate也用到了模板模式,其實在一定程度上,針對資料庫的訪問操作也就是固定的幾步,這裡以查詢為例來說明:
一般訪問資料庫,獲取查詢結果集的操作步驟如下所示:針對其中標紅的,就需要進行抽象,因為不同的語句,獲取的結果集不同。如果不只是單獨討論查詢操作,其中執行並獲取結果集的操作也有所不同。
這裡就模擬一下實現乙個簡易的jdbctemplate
public abstract class jdbctemplate
private connection getconnection() throws exception
private preparedstatement createpreparedstatement(connection connection,string sql) throws exception
private resultset executequery(preparedstatement pstmt,object values) throws exception
return result;
}try
list> result=processresultset(rs);
//5.關閉語句集
rs.close();
//6.關閉結果集
pstmt.close();
//7.關閉連線
connection.close();
} catch (exception e)
return null;
}//這個是處理結果集,沒法在這裡實現,所以進行了抽象
public abstract object processresultset(resultset rs,int rownum) throws sqlexception;
}
模擬乙個memberdaopublic class memberdao extends jdbctemplate
public listquery()
},null);*/
}@override
public object processresultset(resultset rs, int rownum) throws sqlexception
}
模板方法模式總結
模板方法模式 模板方法模式,這個模式我想我們在學習c 的過程中老師總會時不時的用到該模型。就是將 中大量的重複 提取出來然後抽象出乙個模板的雛形類,該類主要為抽象類和虛方法,以便子類的重寫。這樣有助於我們寫出多個功能不同的模板。同時方便我們對有細微變化的 的重用,減少 量,降低出現錯誤的可能。原型模...
設計模式總結之模板方法模式
模板方法模式 在乙個方法中定義乙個演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變演算法結構的情況下,重新定義演算法中的某些步驟。關於模板方法在我們生活中數不勝數,像我們做一些事情需要按照一定順序來執行,像headfirst上的例子,星巴克沖泡咖啡的時候,先是把水煮沸,再是沸水沖...
模板方法模式
有這樣乙個場景 乙個演算法或流程,它的步驟以及步驟之間的順序是固定的,但具體的某一步可能有不同的實現。對於這麼乙個場景,可以建立多個類,各個類實現不同的實現,但是這樣的缺點是 易錯 難改,易錯 應為步驟和順序是固定的,而且在每個類中都要寫一遍,程式設計師怎有心情不好的時候,就有可能把其中某一步給寫錯...