模板方法模式(Template method Pattern)
類型:行為相關
定義:在一個操作方法中,定義演算法的流程,當中某些步驟由子類別完成。模板方法模式讓子類別在不更動原有演算法的流程下,還能夠重新定義當中的步驟。
解釋:定義一個抽象類別,並實作程式流程的模板,讓衍生的子類別也會根據這個流程執行,藉此減少在子類別間重複建構的流程。
參與者有以下2個:
模板類別(AbstractClass):定義一些成員,並實作流程模板方法。
實作類別(ConcreteClass):實作模板類別的成員。
精神:流程抽象。
目的:將子類別中相同的程式流程抽出到上層類別,藉此減少子類別中重複的部分,並可以統一管理這些流程,方便統一更改。
使用時機:類別間有相同的程式流程的時候。
優點:讓程式碼可以重複被利用,統一管理程式流程。
缺點:難以根據需求,在原本的模板流程間個別插入新的流程。
簡易程式範例:
public abstract class AbstractClass { protected abstract bool Operation1(); protected abstract void Operation2(); protected abstract void Operation3(); public void TemplateMethod() { if (Operation1()) { Operation2(); } else { Operation3(); } } } public class ConcreteClassA : AbstractClass { protected override bool Operation1() { //實作內容 } protected override void Operation2() { //實作內容 } protected override void Operation3() { //實作內容 } } public class ConcreteClassB : AbstractClass { protected override bool Operation1() { //實作內容 } protected override void Operation2() { //實作內容 } protected override void Operation3() { //實作內容 } }
UML 類圖(取自維基百科):
1 thoughts on “設計模式-模板方法模式”