漫说模板方法模式---学生时代的烦恼
1. 你過了嗎?多么令人抓狂的四六級考試呀
?有多少人曾經殫精竭慮?有多少人溯夜難眠?就是為了僅僅通過而已。
2. 考試之前,匆忙的需找這2B鉛筆,考試之中的答題卡,多么熟悉的過程呀,
多么多的選擇題,由我們來涂寫,一次次的皺眉,只為勝利的那一刻。
你看,只有一套題目(其實分AB卷),一套答題紙(也分為AB),多么簡單的流程呀,可是為什么我們的分數差別那么大呢??
4. 下面切入正題,我們的模板方法模式:
- Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.
- 定義在一個操作中的一個算法框架,把一些步驟推遲到子類去實現。模板方法模式讓子類不需要改變算法結構而重新定義特定的算法步驟。
4. 示例代碼
類圖
?
package com.programcreek.designpatterns.templatemethod;abstract public class Vehicle {//set to protected so that subclass can accessprotected boolean status;abstract void start();abstract void run();abstract void stop();public void testYourVehicle(){start();if(this.status){run();stop();} } }package com.programcreek.designpatterns.templatemethod;public class Car extends Vehicle {@Overridevoid start() {this.status = true;}@Overridevoid run() {System.out.println("Run fast!");}@Overridevoid stop() {System.out.println("Car stop!");} }package com.programcreek.designpatterns.templatemethod;public class Truck extends Vehicle {@Overridevoid start() {this.status = true;}@Overridevoid run() {System.out.println("Run slowly!");}@Overridevoid stop() {System.out.println("Truck stop!");} }import com.programcreek.designpatterns.templatemethod.Car; import com.programcreek.designpatterns.templatemethod.Truck; import com.programcreek.designpatterns.templatemethod.Vehicle;public class Main {public static void main(String args[]){Car car = new Car();testVehicle(car);Truck truck = new Truck();testVehicle(truck);}public static void testVehicle(Vehicle v){v.testYourVehicle();} }5. 應用場景
????1. ????多個子類有公共方法,并且邏輯基本相同
????2.????對復雜的算法,核心算法設計為模板方法,細節功能則由各個子類實現
????3.????重構代碼
6.擴展
1.在spring中的應用spring jdbc
Spring JDBC提供了一套JDBC抽象框架,用于簡化JDBC開發。Spring主要提供JDBC模板方式、關系數據庫對象化方式、SimpleJdbc方式、事務管理來簡化JDBC編程
Spring提供了3個模板類:
- JdbcTemplate:Spring里最基本的JDBC模板,利用JDBC和簡單的索引參數查詢提供對數據庫的簡單訪問。
- NamedParameterJdbcTemplate:能夠在執行查詢時把值綁定到SQL里的命名參數,而不是使用索引參數。
- SimpleJdbcTemplate:利用Java 5的特性,比如自動裝箱、通用(generic)和可變參數列表來簡化JDBC模板的使用
2. 在jdk中的應用
- 非抽象方法?java.io.InputStream,?java.io.OutputStream,?java.io.Reader和java.io.Writer.
- 非抽象方法?java.util.AbstractList,?java.util.AbstractSet?andjava.util.AbstractMap.
- javax.servlet.http.HttpServlet, 所有?doXXX()?默認發送一個 HTTP 405 "不允許的方法" 錯誤作為響應.你可以改寫或者默認.
reference:
http://www.programcreek.com/2012/08/java-design-pattern-template-method/
http://en.wikipedia.org/wiki/Template_method_pattern
http://book.51cto.com/art/201202/318456.htm
http://my.oschina.net/u/1470003/blog/224031
http://my.oschina.net/aps/blog/85981
http://stackoverflow.com/questions/1673841/examples-of-gof-design-patterns
注:以上圖片來自于互聯網,不一一注明了。
轉載于:https://www.cnblogs.com/davidwang456/p/3678106.html
總結
以上是生活随笔為你收集整理的漫说模板方法模式---学生时代的烦恼的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux vi 撤销重做于前进后退--
- 下一篇: 深入探索 Java 热部署--转