天天看点

设计模式---代理模式(DesignPattern_Proxy)

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

工程GitHub

using UnityEngine;
using System.Collections;

namespace DesignPattern_Proxy
{
    // 制訂RealSubject和Proxy所共用遵偱的介面
    public abstract class Subject
    {
        public abstract void Request();
    }

    // 定義Proxy所代表的真正物件
    public class RealSubject : Subject
    {
        public RealSubject(){}

        public override void Request()
        {
            Debug.Log("RealSubject.Request");
        }
    }

    // 持有指向RealSubject物件的reference以便存取真正的物件
    public class Proxy : Subject
    {
        RealSubject m_RealSubject = new RealSubject();

        // 權限控制
        public bool ConnectRemote{get; set;}

        public Proxy()
        {
            ConnectRemote = false;
        }

        public override void Request()
        {
            // 依目前狀態決定是否存取RealSubject
            if( ConnectRemote )
                m_RealSubject.Request();
            else
                Debug.Log ("Proxy.Request");
        }
    }
}

           
using UnityEngine;
using System.Collections;
using DesignPattern_Proxy;

public class ProxyTest : MonoBehaviour {

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

        // 產生Proxy
        Proxy theProxy = new Proxy();

        // 透過Proxy存取
        theProxy.Request();
        theProxy.ConnectRemote = true;
        theProxy.Request(); 
    }
}

           

继续阅读