代理模式
代理模式:为其他对象提供一种代理,以控制对这个对象的访问
代理顾名思义就是 不直接访问某个对象,而是通过一个中间代理 来访问这个对象
比如A要给C送礼物,但是A不认识C,于是A通过B,请B转交礼物给C。那么在这个情景中B就是代理。
A的真正访问都是通过B来体现的。而且B的操作必须是体现A的,不能有A不具体的操作,比如A通过B送礼物给C,那么B就不能又其他多余的操作,因为他只是A的代理,A不具体的操作,B肯定也不能具备。
所以代理必须和真正的类具备同样的访问操作,
图示:
![查看更多精彩图片](http://photo19.hexun.com/p/2010/0629/403487/b_5CE06996EC797001E89CE1645E6A2341.jpg)
为了使代理类和真正的类具备同样的访问操作,因此必须提供的一个接口,让代理类和真正类都继承,这样就可以约束代理类和真正的类都有同样的访问操作
图例中Subject提供了统一的接口,这个subject可以是接口类也可以是一个抽象类
RealSubject 是真正的类
Proxy是代理类
他们两个都继承Subject类,这样就具备了同样的访问操作
重点在于:代理类 保存一个真实类的引用。这样在访问代理的操作的时候,都可以转到真正类的访问
代码示例
abstract class Subject
{
public starct void Request();
}
public class RealSubject :Subject
{
public override void Request()
{
Console.Write("真正的类请求");
}
}
public class Proxy : Subject
{
RealSubejct sub;
public override void Request()
{
if(sub == null)
sub = new ReqlSubject();
sub.Request
}
}
客户端调用
static void Main(string[] args)
{
Proxy proxy = new Proxy();
proxy.Request();
}
代理顾名思义就是 不直接访问某个对象,而是通过一个中间代理 来访问这个对象
比如A要给C送礼物,但是A不认识C,于是A通过B,请B转交礼物给C。那么在这个情景中B就是代理。
A的真正访问都是通过B来体现的。而且B的操作必须是体现A的,不能有A不具体的操作,比如A通过B送礼物给C,那么B就不能又其他多余的操作,因为他只是A的代理,A不具体的操作,B肯定也不能具备。
所以代理必须和真正的类具备同样的访问操作,
图示:
![查看更多精彩图片](http://photo19.hexun.com/p/2010/0629/403487/b_5CE06996EC797001E89CE1645E6A2341.jpg)
为了使代理类和真正的类具备同样的访问操作,因此必须提供的一个接口,让代理类和真正类都继承,这样就可以约束代理类和真正的类都有同样的访问操作
图例中Subject提供了统一的接口,这个subject可以是接口类也可以是一个抽象类
RealSubject 是真正的类
Proxy是代理类
他们两个都继承Subject类,这样就具备了同样的访问操作
重点在于:代理类 保存一个真实类的引用。这样在访问代理的操作的时候,都可以转到真正类的访问
代码示例
abstract class Subject
{
public starct void Request();
}
public class RealSubject :Subject
{
public override void Request()
{
Console.Write("真正的类请求");
}
}
public class Proxy : Subject
{
RealSubejct sub;
public override void Request()
{
if(sub == null)
sub = new ReqlSubject();
sub.Request
}
}
客户端调用
static void Main(string[] args)
{
Proxy proxy = new Proxy();
proxy.Request();
}
本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册。