欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > 代理模式(ProxyPattern)

代理模式(ProxyPattern)

2024/10/24 13:31:52 来源:https://blog.csdn.net/weixin_45136016/article/details/141201136  浏览:    关键词:代理模式(ProxyPattern)

文章目录

  • 1.代理模式定义
  • 2.UML类图
  • 3.实现代码

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.

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com