參考文件:
通常叫模板方法模式定義乙個演算法的骨架,並允許子類為乙個或者多個步驟提供實現。
能夠使得子類可以在不改變演算法結構的情況下,重新定義演算法的某些步驟。
屬於行為性設計模式
一次性實現乙個演算法的不變的部分,並將可變的部分交給子類來實現
各子類中公共的行為被提取出來並集中到乙個公共的父類當中,從而避免**重複
1、利用模板方法將相同處理邏輯的**放到抽象父類中,可以提高**的復用性。
2、將不同的**不同的子類中,通過對子類的擴充套件增加新的行為,提高**的擴充套件性。
3、把不變的行為寫在父類上,去除子類的重複**,提供了乙個很好的**復用平台,
符合開閉原則。
1、類數目的增加,每乙個抽象類都需要乙個子類來實現,這樣導致類的個數增加。
2、類數量的增加,間接地增加了系統實現的複雜度。
3、繼承關係自身缺點,如果父類新增新的抽象方法,所有子類都要改一遍
乙個小偷偷東西一般分成幾個步驟:
所以我們先定義乙個小偷
public
class
halflingthief
public
void
steal()
public
void
changemethod
(stealingmethod method)
}
因為小偷偷東西都是幾個固定步驟,所以我們使用模板方法,但是下手的過程有多種方式,所以開放鉤子steal方法
/**
* * stealingmethod defines skeleton for the algorithm.
* */
public
abstract
class
stealingmethod
.", target)
;confusetarget
(target)
;stealtheitem
(target);}
}
撞擊然後開溜
public
class
hitandrunmethod
extends
stealingmethod
@override
protected
void
confusetarget
(string target)
@override
protected
void
stealtheitem
(string target)
}
偷偷摸摸的幹活
測試
/**
* * template method defines a skeleton for an algorithm. the algorithm subclasses provide
* implementation for the blank parts.
* * in this example contains that can be changed. first
* the thief hits with and then with .
* */
public
class
}
jdbctemplate
獲取連線和關閉鏈結都已經寫好了
處理結果集的地方開放
模板和策略的區別:
模板子類能干預實現,但是基礎流程已經定下來了
策略不能干預流程,實現方式只能去選擇
23種設計模式 14 模板方法模式
第一種實現 抽象類 第一種實現 抽象類 public abstract class makefood public void pouroil public void waitoilhot 具體往鍋裡倒哪個菜,交給子類,子類必須實現 public abstract void pourfood publ...
23種設計模式 06模板方法模式
模板方法模式太簡單,我都感覺不像乙個設計模式,這個模式沒有學過設計模式的同學也可能非常容易的想到,並寫出來,那麼下面,我的簡單的舉個例子吧!uml圖就不用畫了 小明小紅 cpur5 i7記憶體條 16g16g 顯示卡gtx 1650 集顯硬碟 500g 500g 此時,我們發現,配置過程中,除了硬體...
23種設計模式 模板模式
在軟體構建過程中,對於某一項任務,它常常有穩定的整體操作結構,但各個子步驟卻有很多改變的需求,或者由於固有的原因 比如說框架與應用之間的關係 而無法和任務的整體結構同時實現。如何在確定穩定操作的前提下,來靈活應對各個子步驟的變化或者晚期的需求?定義乙個操作中的演算法的骨架 穩定 而將一些步驟延遲 變...