設計模式-模板方法模式

模板方法模式(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 類圖(取自維基百科):

template_method_uml-svg
模板方法UML

template-method-pattern-animation

1 thoughts on “設計模式-模板方法模式

發表留言