模板方法模式總結

2021-08-17 17:35:47 字數 2831 閱讀 4436

模板方式模式也是比較好理解的設計模式之一,結合實際例子理解,在飲料實際製作過程中,大體上會分為如下幾個大的步驟: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上的例子,星巴克沖泡咖啡的時候,先是把水煮沸,再是沸水沖...

模板方法模式

有這樣乙個場景 乙個演算法或流程,它的步驟以及步驟之間的順序是固定的,但具體的某一步可能有不同的實現。對於這麼乙個場景,可以建立多個類,各個類實現不同的實現,但是這樣的缺點是 易錯 難改,易錯 應為步驟和順序是固定的,而且在每個類中都要寫一遍,程式設計師怎有心情不好的時候,就有可能把其中某一步給寫錯...