一.認識模板方法設計模式
1.模式定義
定義乙個操作演算法中的框架,而將這些步驟延遲載入到子類中。它的本質就是固定演算法框架。
2.解決何種問題
讓父類控制子類方法的呼叫順序。模板方法使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。
3.模式好處
開發人員在開發時,只需要考慮方法的實現,不需要考慮方法在何種情況下被呼叫,實現了**的復用。
4.模式適用場景
二.模式結構與例項講解
1.模式結構
如模板方法模式結構圖所知,有兩個類:
2.例項講解
建立乙個抽象模板結構(abstractclass)好父親
public
abstract
class
abstractclass
// 家裡窮更得用工學習
public
void 學習(
)// 工作必須穩定
public
void 工作(
)// 戀愛自由 讓兒子自由戀去
public
abstract
void 愛情();
}
建立乙個具體模板(concreteclass)好兒子
public
class
concreteclass
extends
abstractclass
// 父親給我愛情自由 一定要好好談戀愛
@override
public
void 愛情(
)}
呼叫他們的人生
public
class
test
}
輸出結果
60分萬歲...
從一而終
膚白貌美大長腿...
3.模式在servlet中的應用3.1自己實現瀏覽器向服務端傳送乙個請求,常用請求方式有兩種,get請求和post請求,這兩種請求方式會導致請求引數在請求協議包(http包)中的位置是不一樣的,那麼請求協議包中不同的內容到達服務端之後會由不同的物件進行處理,如請求頭的內容由tomcat負責,請求體中的內容由request負責,所以此時,開發人員在拿到service()方法後考慮到它可以接受所有請求方式,因此會針對不同的請求方式封裝不同的請求方法。
建立乙個oneservlet繼承genericservlet,實現service()方法,需要重寫裡面的dopost和doget方法。
public
class
oneservlet
extends
genericservlet
elseif(
"post"
.equals
(method))}
// 處理瀏覽器傳送的post請求
public
void
dopost
(servletrequest arg0, servletresponse arg1)
// 處理瀏覽器傳送的get請求
public
void
doget
(servletrequest arg0, servletresponse arg1)
}
現在開發人員面臨的是,即需要做方法的實現,又需要考慮service()方法在何時呼叫。在實際開發過程中service()方法裡面是一段重複性的**,所有的servlet類實現中都需要寫這麼一段重複性的**,這樣重複的開發既增加工作量,又顯得**臃腫,降低了系統耦合度。模板方法設計模式就是來解決這個問題的。下面看一下怎麼解決。
建立myhttpservlet類(就是模板方法設計模式中的父類),繼承genericservlet類。
}建立twoservlet類,此時此刻開發人員不用去考慮何時呼叫doget方法。當呼叫twoservlet類的時候,tomcat一定是呼叫它的service()方法。
}當呼叫twoservlet類的時候,tomcat一定是呼叫它的service()方法,如果瀏覽器傳送的請求方式為get,那麼則會執行twoservlet中的doget()方法。
3.2看httpservlet原始碼
httpservlet也繼承了genericservlet,跟蹤找到service()方法,發現有兩個service()方法。
// 這個方法是從它的父類genericservlet繼承過來的
@override
public
void
service
(servletrequest req, servletresponse res)
throws servletexception, ioexception
// 分別對請求物件和響應物件做了型別強轉
;// 呼叫的是自己宣告的service方法,過載
}
進入到自己宣告的service()方法
}發現service()方法沒有使用final,這是因為如果使用final修飾,就徹底斷絕了我們下游開發人員的開發,這樣是降低了系統的靈活度。
設計模式是問題解決思想,沒有固定的命令搭配 。如果我們自己可以有這樣一些解決辦法,那就是好的設計模式。
模板設計模式 設計模式 模板方法模式
在模板模式 template pattern 中,乙個抽象類公開定義了執行它的方法的方式 模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。首先需要一定抽象的定義,沒有具體的實現,但是在抽象類的行為中,子類去程序這個抽象類,重寫抽象方法,實現不...
設計模式 模板方法設計模式
物件導向,萬物皆物件,用乙個雷來反應現實生活中的東西。比如銀行系統,業務公升級 活期 定期,差別很小,就加判斷 違背單一職責 差別比較多,尤其是模擬較複雜,型別拆分下。拆分之後,自然就有父類,重用。利率 每個客戶端都有利率,但是各不一樣 抽象方法。show 不分客戶端是一樣的,個別客戶端是不一樣的 ...
設計模式 模板方法模式
模板方法模式 類庫中大量使用,例如idbconnection介面 dbconnection抽象類 派生的sqlconnection和派生的oledbconnection就是使用了這種方法 1。介面,到能做的定義進來。一種規範 2.把共同的部分進去分離出來,放到乙個抽象的父類去實現.3.子類中實現 不...