您好,登錄后才能下訂單哦!
小編給大家分享一下Java如何實現Template,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
前言:
我們在開發中有很多固定的流程,這些流程有很多步湊是固定的,比如JDBC中獲取連接,關閉連接這些流程是固定不變的,變動的只有設置參數,解析結果集這些是根據不同的實體對象“來做調整”,針對這種擁有固定算法流程,其中有固定的步湊,存在不固定的步湊的情況下就誕生了模板方法模式。
模板方法模式(Template)定義:
模板方法模式又叫模板模式,指的是父類定義了一個多步湊的算法骨架,其中很多步湊是在父類中實現了的,有的步湊是根據不同的子類擁有不同的實現,就把這些“不確定”的實現步湊定義為抽象方法交給子類去實現。模板模式的核心就是在使子類不改變算法結構的情況下,重新定義算法的某些步湊。屬于行為型設計模式。應用很廣發,比如Mybatis中的BaseExecutor;Spring中的JdbcTemplate;Spring集成Hibernate中的HibernateTemplate,Spring集成各種Mq的Template,還有MongodbTemplate等......
模式中的角色:
抽象類(AbstractClass):實現了模板方法,定義了算法的骨架。
具體類 (Concrete):實現了抽象類中抽象放,使得父類定義的算法更完整。
代碼實現:
1:用抽象類定義流程,比如我們每天上班有個流程: 開機-->寫代碼(不同的程序員可能寫不同的代碼-->關機; 整個流程中開機和關機是相同的,只是寫代碼這個步湊不同,java程序員寫java代碼,Php程序員寫Php代碼; 我們先用一個抽象的父類定義這個流程:
public abstract class Work { //定義算法步湊流程 public void workDay(){ //1:上班開機 openComputer(); //2:搬磚:寫代碼 coding(); //3:下班關機 closeComputer(); } //開機 private final void openComputer() { System.out.println("到達公司,開機"); } //寫代碼 protected abstract void coding(); //關機 private final void closeComputer() { System.out.println("下班,關機"); } }
2:具體實現
Java程序員
public class JavaProgrammer extends Work { @Override protected void coding() { System.out.println("Java程序員打開Idea,寫Java代碼。。。"); } }
PHP程序員
public class PhpProgrammer extends Work { @Override protected void coding() { System.out.println("PHP程序員打開Zend Studio,寫Php代碼。。。"); } }
3:使用
public class TemplateMethodDemo { public static void main(String[] args) { Work javaProgrammer = new JavaProgrammer(); javaProgrammer.workDay(); System.out.println("================"); Work phpProgrammer = new PhpProgrammer(); phpProgrammer.workDay(); } }
運行結果
模板模式在源碼中的體現:
1:我們每天都在使用的HttpServlet里面的service方法,service方法里面定義了調用流程,根據客戶端調用的不同方式,if else邏輯判斷調用不同的方法,比如doGet,doPost,doDelete等實現restful調用,具體的doGet,doPost方法實現我們可以在我們自己定義的Servlet中進行重寫。
2:Mybatis框架中也有一些經典實用,比如BaseExecutor類,它是一個基礎的SQL執行類,實現了大部分SQL的執行邏輯,然后把幾個方法教給子類定制化完成,源碼如下:
其中doUpdate(),doFlushStatements(),doQuery(),doQueryCursor()等方法都是由子類來實現的,BaseExecutor有那些子類呢?我們來看一下他的類圖:
我們可以去看看具體每個子類的不同的實現。
模板模式的優缺點:
優點:
1:利用模板模式可以將相同處理邏輯的代碼放到抽象父類中,提高了代碼的復用性。
2:將不同的邏輯放到不同的子類中,通過子類的擴展增加新的行為,提高了代碼的擴展性。
3:把不變的行為寫在父類中,去除了子類的重復代碼,提供了一個很好的代碼復用平臺,符合開閉原則。
4:公司的高級工程師或者架構師在項目前期可以利用模板模式定義好流程,讓其他編碼功工程師去實現具體。
缺點:
1:每個抽象類都需要至少一個子類來實現,導致了類數量的增加。
2:類數量增加間接增加了系統的復雜性。
3:因為繼承關系的自身缺點,如果父類添加一個新的抽象方法,素有子類都要實現一遍。
以上是“Java如何實現Template”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。