设计模式---策略模式(DesignPattern_Strategy)

摘录自:设计模式与游戏完美开发

十年磨一剑,作者将设计模式理论巧妙地融入到实践中,以一个游戏的完整实现呈现设计模式的应用及经验的传承 《轩辕剑》之父——蔡明宏、资深游戏制作人——李佳泽、Product Evangelist at Unity Technologies——Kelvin Lo、信仁软件设计创办人—— 赖信仁、资深3D游戏美术——刘明恺 联合推荐全书采用了整合式的项目教学,即以一个游戏的范例来应用23种设计模式的实现贯穿全书,让读者学习到整个游戏开发的全过程和作者想要传承的经验,并以浅显易懂的比喻来解析难以理解的设计模式,让想深入了解此领域的读者更加容易上手。


工程GitHub

using UnityEngine;
using System.Collections;

namespace DesignPattern_Strategy
{
    // 擁有Strategy物件的客戶端
    public class Context
    {
        Strategy m_Strategy = null;

        // 設定演算法
        public void SetStrategy(Strategy theStrategy)
        {
            m_Strategy = theStrategy;
        }

        // 執行目前的演算法
        public void ContextInterface()
        {
            m_Strategy.AlgorithmInterface();
        }
    }

    // 演算法的共用介面, Context透過此介面呼叫 ConcreteStrategy所實作的演算法
    public abstract class Strategy
    {
        public abstract void AlgorithmInterface();
    }

    // 演算法A
    public class ConcreteStrategyA : Strategy
    {
        public override void AlgorithmInterface()
        {
            Debug.Log("ConcreteStrategyA.AlgorithmInterface");
        }
    }

    // 演算法B
    public class ConcreteStrategyB : Strategy
    {
        public override void AlgorithmInterface()
        {
            Debug.Log("ConcreteStrategyB.AlgorithmInterface");
        }
    }

    // 演算法C
    public class ConcreteStrategyC : Strategy
    {
        public override void AlgorithmInterface()
        {
            Debug.Log("ConcreteStrategyC.AlgorithmInterface");
        }
    }
}

using UnityEngine;
using System.Collections;
using DesignPattern_Strategy;

public class StrategyTest : MonoBehaviour
{

    // Use this for initialization
    void Start()
    {
        UnitTest();
    }

    // Update is called once per frame
    void UnitTest()
    {
        Context theContext = new Context();

        // 設定演算法
        theContext.SetStrategy(new ConcreteStrategyA());
        theContext.ContextInterface();

        theContext.SetStrategy(new ConcreteStrategyB());
        theContext.ContextInterface();

        theContext.SetStrategy(new ConcreteStrategyC());
        theContext.ContextInterface();
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容