Java設計模式筆記之模板方法模式

1.定義

 模板方法模式:定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。

2.UML圖


AbstractClass是抽象類,其實就是一個抽象模板,它定義並實現了一個模板方法。該模板方法一般是一個具體方法,給出了一個頂級邏輯的骨架,而邏輯的組成步驟在相應的抽象操作中,推遲到子類實現。頂級邏輯也有可能調用一些具體方法。

abstract class AbstractClass{
	//一些抽象行爲放到子類中去實現
	public abstract void primitiveOperation1();
	public abstract void primitiveOperation2();

	//模板方法,給出了邏輯的骨架,而邏輯的組成是一些相應的抽象操作,它們都推遲到子類中實現
	public void templateMethod(){
		primitiveOperation1();
		primitiveOperation2();
		System.out.println("");
	}

}

ConcreteClass,實現父類所定義的一個或多個抽象方法。每一個ConcreteClass都可以給出這些抽象方法(頂級邏輯的組成步驟)的不同實現,從而使得頂級邏輯的實現各不相同。

class ConcreteClassA extends AbstractClass{
	@Override
	public void primitiveOperation1(){
		System.out.println("具體類A方法1實現");
	}

	@Override
	public void primitiveOperation2(){
		System.out.println("具體類A方法2實現");
	}
}

class ConcreteClassB extends AbstractClass{
	@Override
	public void primitiveOperation1(){
		System.out.println("具體類B方法1實現");
	}

	@Override
	public void primitiveOperation2(){
		System.out.println("具體類B方法2實現");
	}
}

3.模板方法特點

關鍵理解點:所謂模板即可以看成是我們把不變的步驟抽象到超類等高級層次,詳細的實現步驟交給子類去。好比你乘坐交通工具,都要有的步驟就是:買票-驗票-上交通工具-到達目的地。但是我買票是買的火車票還是飛機票還是船票就不屬於我超類該考慮的了。

書中講到,當不變的和可變的行爲在方法的子類實現中混合在一起的時候,不變的行爲就會在子類中重複出現。我們通過模板方法模式把這些行爲搬移到單一的地方,進而幫助子類擺脫重複的不變行爲的糾纏。


4.Android源碼中的模板方法模式

Android中,AsyncTask是常用的一個。該類使用的正是模板方法模式。

使用AsyncTask的時候,耗時的任務放到了doInBackground(Params...params)中,在doInBackground()方法前如果還有初始化操作就使用onPreExecute(),doInBackground()方法執行完畢後,就會執行onPostExecute()方法。(也可以通過調用onProgressUpdate()方法來更新進度)。整個執行過程就是一個框架如圖所示:






發佈了105 篇原創文章 · 獲贊 35 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章