代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
组成:
- 抽象角色:通过接口或抽象类声明真实角色实现的业务方法。
- 代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
- 真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
实现:
我们将创建一个 Image 接口和实现了 Image 接口的实体类。ProxyImage 是一个代理类,减少 RealImage 对象加载的内存占用。
ProxyPatternDemo,我们的演示类使用 ProxyImage 来获取要加载的 Image 对象,并按照需求进行显示。
代码如下:
首先定义一个抽象任务类,当然也能是接口
abstract class Subject
{
public abstract void Request();
}
接着是被代理方,也就是请求任务者
class RealSubject :Subject
{
public override void Request ()
{
Debug.Log ("真是的请求");
}
}
然后是代理(Proxy)
class Proxy:Subject
{
RealSubject realSubject;
public override void Request ()
{
if (realSubject == null) {
realSubject = new RealSubject ();
//如果需要传参则设置RealSubject构造函数即可
}
realSubject.Request ();
}
}
最后依然是客户端代码
class Client :MonoBehaviour
{
void Start()
{
Proxy proxy = new Proxy ();
proxy.Request ();
}
}
参考:
https://blog.youkuaiyun.com/qq_28221881/article/details/67654789
https://www.runoob.com/design-pattern/proxy-pattern.html