Unity 设计模式之 代理模式的实例介绍

2025-11-03 02:23:26

1、代理模式:

       直接访问对象比较困难,或直接访问会给使用者或系统带来一系列问题的时候,为其他对象提供一种代理以控制对这个对象的访问。

2、代理模式(Proxy)结构图:

      

Unity 设计模式之 代理模式的实例介绍

3、模式角色:

      1、Subject(实体接口):定义了 RealSubject 和 Proxy 的公共接口,这样就在任何时候使用 RealSubject 的地方使用代理 Proxy;

       2、RealSubject(真实实体):继承 Subject 公共接口,定义Proxy所代表的真实实体;

       3、Proxy(代理):继承 Subject,可以直接访问 RealSubject,代理可以代替真实实体;

4、模式的优缺点:     

       优点:

       1)代理模式能够将调用用于真正被调用的对象隔离,在一定程度上降低了系统的耦合度;

       2)代理对象在客户端和目标对象之间起到一个中介的作用,这样可以起到对目标对象的保护。代理对象可以在对目标对象发出请求之前进行一个额外的操作,例如权限检查等。

        缺点:

       3)由于在客户端和真实主题之间增加了一个代理对象,所以会造成请求的处理速度变慢

       4)实现代理类也需要额外的工作,从而增加了系统的实现复杂度。

5、代理模式使用案例示图:

Unity 设计模式之 代理模式的实例介绍

1、打开Unity,新建一个空工程,具体如下图

Unity 设计模式之 代理模式的实例介绍

2、在工程中,新建几个脚本,然后双击打开,具体如下图

Unity 设计模式之 代理模式的实例介绍

3、脚本的具体代码和代码说明如下图

Unity 设计模式之 代理模式的实例介绍

Unity 设计模式之 代理模式的实例介绍

Unity 设计模式之 代理模式的实例介绍

Unity 设计模式之 代理模式的实例介绍

4、GiveGiftISubject 脚本具体内容如下:

public interface GiveGiftISubject {

    void GiveDolls ();

    void GiveFlowers ();

    void GiveChocolate ();

}

5、PursuitRealSubject 脚本具体内容如下:

using UnityEngine;

public class PursuitRealSubject : GiveGiftISubject {

    string name;

    public PursuitRealSubject(string name){

        this.name = name;

    }

    public void GiveDolls ()

    {

        Debug.Log (name + " 送你洋娃娃");

    }

    public void GiveFlowers ()

    {

        Debug.Log (name + " 送你鲜花");

    }

    public void GiveChocolate ()

    {

        Debug.Log (name + " 送你巧克力");

    }

        }

6、Proxy 脚本具体内容如下:

public class Proxy : GiveGiftISubject {

    PursuitRealSubject pursuit;

    public Proxy(string name){

        pursuit = new PursuitRealSubject (name);

    }

    public void GiveDolls ()

    {

        pursuit.GiveDolls ();

    }

    public void GiveFlowers ()

    {

        pursuit.GiveFlowers ();

    }

    public void GiveChocolate ()

    {

        pursuit.GiveChocolate ();

    }

}

7、Proxy 脚本具体内容如下:

using UnityEngine;

public class Test : MonoBehaviour {

    // Use this for initialization

    void Start () {

        Proxy daili = new Proxy ("Girl");

        daili.GiveDolls ();

        daili.GiveFlowers ();

        daili.GiveChocolate ();

    }

       

}

8、脚本编译正确,回到Unity界面,在场景中新建一个 GameObject,并把 Test 脚本赋给 GameObject,具体如下图

Unity 设计模式之 代理模式的实例介绍

9、运行场景,控制台 Console 打印如下图

Unity 设计模式之 代理模式的实例介绍

10、到此,《Unity 设计模式之 代理模式的实例介绍》讲解结束,谢谢

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢