Unity 设计模式之 代理模式的实例介绍
1、代理模式:
直接访问对象比较困难,或直接访问会给使用者或系统带来一系列问题的时候,为其他对象提供一种代理以控制对这个对象的访问。
2、代理模式(Proxy)结构图:

3、模式角色:
1、Subject(实体接口):定义了 RealSubject 和 Proxy 的公共接口,这样就在任何时候使用 RealSubject 的地方使用代理 Proxy;
2、RealSubject(真实实体):继承 Subject 公共接口,定义Proxy所代表的真实实体;
3、Proxy(代理):继承 Subject,可以直接访问 RealSubject,代理可以代替真实实体;
4、模式的优缺点:
优点:
1)代理模式能够将调用用于真正被调用的对象隔离,在一定程度上降低了系统的耦合度;
2)代理对象在客户端和目标对象之间起到一个中介的作用,这样可以起到对目标对象的保护。代理对象可以在对目标对象发出请求之前进行一个额外的操作,例如权限检查等。
缺点:
3)由于在客户端和真实主题之间增加了一个代理对象,所以会造成请求的处理速度变慢
4)实现代理类也需要额外的工作,从而增加了系统的实现复杂度。
5、代理模式使用案例示图:

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

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

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




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,具体如下图

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

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