美文网首页Unity教程合集Unity基础入门分享程序员
设计模式---策略模式(DesignPattern_Strate

设计模式---策略模式(DesignPattern_Strate

作者: su9257_海澜 | 来源:发表于2017-08-31 10:33 被阅读18次

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

    十年磨一剑,作者将设计模式理论巧妙地融入到实践中,以一个游戏的完整实现呈现设计模式的应用及经验的传承 《轩辕剑》之父——蔡明宏、资深游戏制作人——李佳泽、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();
        }
    }
    
    

    相关文章

      网友评论

        本文标题:设计模式---策略模式(DesignPattern_Strate

        本文链接:https://www.haomeiwen.com/subject/agzfjxtx.html