設計模式—模板模式(DesignPattern_TemplateMethod)

su9257_海瀾發表於2017-09-05

摘錄自:設計模式與遊戲完美開發

十年磨一劍,作者將設計模式理論巧妙地融入到實踐中,以一個遊戲的完整實現呈現設計模式的應用及經驗的傳承 《軒轅劍》之父——蔡明巨集、資深遊戲製作人——李佳澤、Product Evangelist at Unity Technologies——Kelvin Lo、信仁軟體設計創辦人—— 賴信仁、資深3D遊戲美術——劉明愷 聯合推薦全書採用了整合式的專案教學,即以一個遊戲的範例來應用23種設計模式的實現貫穿全書,讓讀者學習到整個遊戲開發的全過程和作者想要傳承的經驗,並以淺顯易懂的比喻來解析難以理解的設計模式,讓想深入瞭解此領域的讀者更加容易上手。


工程GitHub

模板方法模式:模板方法模式準備一個抽象類,將部分邏輯以具體方法以及具體構造子的形式實現,然後宣告一些抽象方法來迫使子類實現剩餘的邏輯。不同的子類可以以不同的方式實現這些抽象方法,從而對剩餘的邏輯有不同的實現。先制定一個頂級邏輯框架,而將邏輯的細節留給具體的子類去實現。

using UnityEngine;
using System.Collections;

namespace DesignPattern_TemplateMethod
{
    // 演算法相關執行順序
    public abstract class AbstractClass
    {
        public void TemplateMethod()
        {
            PrimitiveOperation1();
            PrimitiveOperation2();
        }
        protected abstract void PrimitiveOperation1();
        protected abstract void PrimitiveOperation2();
    }

    // 演算法A執行順序
    public class ConcreteClassA : AbstractClass
    {
        protected override void PrimitiveOperation1()
        {
            Debug.Log("ConcreteClassA.PrimitiveOperation1");
        }
        protected override void PrimitiveOperation2()
        {
            Debug.Log("ConcreteClassA.PrimitiveOperation2");
        }
    }

    // 演算法B執行順序
    public class ConcreteClassB : AbstractClass
    {
        protected override void PrimitiveOperation1()
        {
            Debug.Log("ConcreteClassB.PrimitiveOperation1");
        }
        protected override void PrimitiveOperation2()
        {
            Debug.Log("ConcreteClassB.PrimitiveOperation2");
        }
    }
}
using UnityEngine;
using System.Collections;
using DesignPattern_TemplateMethod;

public class TemplateMethodTest : MonoBehaviour
{

    void Start()
    {
        UnitTest();
    }


    void UnitTest()
    {
        AbstractClass theClass = new ConcreteClassA();
        theClass.TemplateMethod();

        theClass = new ConcreteClassB();
        theClass.TemplateMethod();

    }
}


相關文章