1.代理模式定义
代理对象控制着对原对象得访问,并允许将请求提交给原对象前后进行一些处理
信用卡是银行账户的代理, 银行账户则是一大捆现金的代理。 它们都实现了同样的接口, 均可用于进行支付。 消费者会非常满意, 因为不必随身携带大量现金; 商店老板同样会十分高兴, 因为交易收入能以电子化的方式进入商店的银行账户中, 无需担心存款时出现现金丢失或被抢劫的情况。
2.UML类图
抽象服务接口(Service Interface): 声明了真实服务和代理的公共接口,这样一来在使用真实服务的任何地方都可以使用代理。
代理(Proxy): 代理内部含有对真实服务的引用,从而可以操作真实服务对象;代理服务负责在需要的时候创建真实服务对象;代理服务通常在将客户端调用传递到真实服务之前或之后,都要执行一些其他的操作,而不是单纯地将调用传递给真实服务对象。
真实服务(Server): 实现了抽象服务接口的真实服务
3.实现代码
抽象服务接口:
public interface IServer
{
void Request();
}
真实服务:
public class RealServer : IServer
{
public void Request()
{
Console.WriteLine("RealServer: Handling request.");
}
}
代理:
public class Proxy : IServer
{
private RealServer _realServer;
public Proxy(RealServer realSubject)
{
_realServer = realSubject;
}
public void Request()
{
CheckAccess();
_realServer.Request();
LogAccess();
}
private bool CheckAccess()
{
// Some real checks should go here.
Console.WriteLine("Proxy: Checking access prior to firing a real request.");
return true;
}
private void LogAccess()
{
Console.WriteLine("Proxy: Logging the time of request.");
}
}
使用:
RealServer realServer = new RealServer();
Proxy proxy = new Proxy(realServer);
proxy.Request();
Proxy: Checking access prior to firing a real request.
RealServer: Handling request.
Proxy: Logging the time of request.
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » 代理模式(ProxyPattern)
发表评论 取消回复