設計模式(java)-模板方法模式

1. 簡介

  模板方法模式,行爲型設計模式。定義一個算法的執行骨架,而內部的操作步驟可由子類去做不同的實現。例如一些小遊戲如射擊、足球等,它們的執行過程都是一樣的,只是執行內容不同罷了,那麼這個執行過程(初始化、開始遊戲、結束遊戲)就是算法的骨架,而執行內容(射擊本身和足球本身的規則、內容不一樣)就是具體的操作內容。再比如,我們高中時經常會遇到同一類應用題,它們的解題思路都是基本一致的,而題目中的場景、數值是不一樣的,這其中解題思路就是骨架,而不同的場景和數值就對應不同子類的實現。

2. 類圖

  模板方法模式的類圖比較簡單,就是單純的繼承關係,多個子類繼承同一個父類,主要的不同是,父類中有一個由上所述的骨架方法–模板方法。而類似初始化、開始、結束的這些方法爲抽象方法,由不同的子類去實現。

3. 代碼實例

  有一種算法,它的過程都是先初始化、開始、結束,只是它的初始化、開始、結束的方法內容有多種版本。

package eaikao.templatemethod;

abstract class Algorithm {
	abstract void init();
	abstract void start();
	abstract void end();
	
	public final void process() {
		init();
		start();
		end();
	}
}

class AlgorithmA extends Algorithm {

	@Override
	void init() {
		// TODO Auto-generated method stub
		 System.out.println("init AlgorithmA!");
	}

	@Override
	void start() {
		// TODO Auto-generated method stub
		 System.out.println("start AlgorithmA!");
	}

	@Override
	void end() {
		// TODO Auto-generated method stub
		 System.out.println("end AlgorithmA!");
	}
}

class AlgorithmB extends Algorithm {

	@Override
	void init() {
		// TODO Auto-generated method stub
		 System.out.println("init AlgorithmB!");
	}

	@Override
	void start() {
		// TODO Auto-generated method stub
		 System.out.println("start AlgorithmB!");
	}

	@Override
	void end() {
		// TODO Auto-generated method stub
		 System.out.println("end AlgorithmB!");
	}
	
}

public class ETemplateMethod {
	public static void main(String[] args) {
		Algorithm algorithmA = new AlgorithmA();
		algorithmA.process();
		
		Algorithm algorithmB = new AlgorithmB();
		algorithmB.process();
	}
}

  輸出內容:

init AlgorithmA!
start AlgorithmA!
end AlgorithmA!
init AlgorithmB!
start AlgorithmB!
end AlgorithmB!

  如上就是模板方法設計模式,它主要將不變的行爲控制在父類中,而具體實現放在子類中,有利於可變部分的擴展。這種模式在我們項目中也經常使用到。是一種比較簡單並常用的設計模式。

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