一、代理模式(Proxy)
定义:为其他对象提供一种代理以控制对这个对象的访问
自己的理解:给目标对象提供一个代理对象,让代理对象控制对目标对象的引用
二、代理模式UML图
(1)Subject:定义了RealSubject(真实对象)和Proxy(代理对象)的公共接口,这样就在任何使用RealSubject的地方都可以用Proxy
(2)RealSubject(真实对象):定义了Proxy所代表的的真实实体,最终引用的对象
(3)Proxy(代理对象):保存一个引用使得代理可以访问实体(相当于对真实对象进行一个封装),并提供一个与Subject的接口相同的接口,这样的代理就可以用来替代实体
三、代码实现
Subject类
abstract class Subject
{
public abstract void Request();
}
RealSubject类
class RealSubject : Subject
{
public override void Request()
{
Console.WriteLine("真实的请求");
}
}
Proxy类
class Proxy : Subject
{
RealSubject realSubject;
public override void Request()
{
if (realSubject ==null )
{
realSubject = new RealSubject();
}
realSubject.Request();
}
}
客户端代码
static void Main(string[] args)
{
Proxy proxy = new Proxy();
proxy.Request();
Console.Read();
}
四、优缺点(网上看到的)
1.优点
(1)协调调用者和被调用者,降低了系统的耦合度
(2)代理对象作为客户端和目标对象之间的中介,起到了保护目标对象的作用
2.缺点
(1)由于在客户端和真实主题之间增加了代理对象,因此会造成请求的处理速度变慢
(2)实现代理模式需要额外的工作(有些代理模式的实现非常复杂),从而增加了系统实现的复杂度