ymkNK / ymkNK.github.io

Personal Blog
https://lllovol.com
2 stars 0 forks source link

设计模式-Proxy代理模式 #116

Open ymkNK opened 2 years ago

ymkNK commented 2 years ago

https://lllovol.com/p/2021/10/proxy-pattern/

简介 代理是一种结构型设计模式,让你能够提供对象的替代品或其占位符。 代理控制着对于原对象的访问,并允许在将请求提交给对象前后进行一些处理。 原理 代理模式建议新建一个与原服务对象接口相同的代理类, 然后更新应用以将代理对象传递给所有原始对象客户端。 代理类接收到客户端请求后会创建实际的服务对象, 并将所有工作委派给它。 类比 信用卡是银行账户的代理,银行账户则是一大捆现金的代理。 它们都实现了同样的接口,均可用于进行支付。 结构 服务接口(ServiceInterface):申明服务接口,代理必须实现这个接口才能伪装成Service 服务(Service):提供服务的真实业务逻辑 代理(Proxy):代理完成代理的任务后,然后将请求传递给服务对象 客户端(Client): 能通过同一接口与服务或代理进行交互,可在一切需要服务对象的代码中使用代理 应用场景 延迟初始化(虚拟代理) 访问控制(保护代理) 本地执行远程服务(远程代理) 记录日志请求(日志记录代理) 缓存请求结果(缓存代理) 只能引用:客户端不调用的时候直接销毁服务对象 优缺点 优点 在客户端毫无察觉的情况下控制服务对象 如果客户端对服务对象的生命周期没有特殊要求, 你可以对 生命周期进行管理 即使服务对象还未准备好或不存在, 代理也可以正常工作 开闭原则。 你可以在不对服务或客户端做出修改的情况下创建新代理 缺点 代码变复杂 请求时间延迟增加