漫說模板方法模式---學生時代的煩惱

  1. 你過了嗎?多麼使人抓狂的四六級考試呀

漫說模板方法模式---學生時代的煩惱

有多少人曾經殫精竭慮?有多少人溯夜難眠?就是爲了僅僅經過而已。java

  1. 考試以前,匆忙的需找這2B鉛筆,考試之中的答題卡,多麼熟悉的過程呀,

多麼多的選擇題,由咱們來塗寫,一次次的皺眉,只爲勝利的那一刻。算法

漫說模板方法模式---學生時代的煩惱

你看,只有一套題目(其實分AB卷),一套答題紙(也分爲AB),多麼簡單的流程呀,但是爲何咱們的分數差異那麼大呢??spring

  1. 下面切入正題,咱們的模板方法模式:

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.
定義在一個操做中的一個算法框架,把一些步驟推遲到子類去實現。模板方法模式讓子類不須要改變算法結構而從新定義特定的算法步驟。
漫說模板方法模式---學生時代的煩惱數據庫

  1. 示例代碼

類圖編程

漫說模板方法模式---學生時代的煩惱

package com.programcreek.designpatterns.templatemethod;

abstract public class Vehicle {
    //set to protected so that subclass can access
    protected 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 {

    @Override
    void start() {
        this.status = true;
    }

    @Override
    void run() {
        System.out.println("Run fast!");

    }

    @Override
    void stop() {
        System.out.println("Car stop!");
    }
}

package com.programcreek.designpatterns.templatemethod;

public class Truck extends Vehicle {

    @Override
    void start() {
        this.status = true;
    }

    @Override
    void run() {
        System.out.println("Run slowly!");
    }

    @Override
    void 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();
    }
}
  1. 應用場景框架

    1. 多個子類有公共方法,而且邏輯基本相同ide

    2. 對複雜的算法,核心算法設計爲模板方法,細節功能則由各個子類實現this

    3. 重構代碼

6.擴展.net

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模板的使用

  1. 在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

注:以上圖片來自於互聯網,不一一註明了

相關文章
相關標籤/搜索