代理模式
代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。
在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理模式的优点:
(1)、职责清晰,真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。
(2)、代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了的作用和保护了目标对象的作用。
(3)、高扩展性
代理模式的UML图:
代码示例:
namespace ConsoleApplication1 { abstract class Subject { public abstract void Request(); } class RealSubject : Subject { public override void Request() { Console.WriteLine("真实的请求!"); } } //代理类 class Proxy : Subject { RealSubject realSubject; //用于装载真实对象 public override void Request() { if (realSubject == null) { realSubject = new RealSubject(); //获得真实对象 } realSubject.Request(); //调用真实对象的请求方法 } } class Program { static void Main(string[] args) { Proxy proxy = new Proxy(); proxy.Request(); //输出真实的请求 Console.ReadKey(); } } }
从代码来看,代理模式的思想是很简单的,难度应该在怎么灵活应用上。
namespace 代理模式 { class Program { static void Main(string[] args) { 小夫 proxy = new 小夫(); proxy.Hit(); //输出真实的请求 Console.ReadKey(); } } abstract class Subject { public abstract void Hit(); } class 胖虎 : Subject { public override void Hit() { Console.WriteLine("揍大雄!"); //Type t = this.GetType(); //Console.WriteLine("揍大雄的人是:" + t.Name); } } //代理类 class 小夫 : Subject { 胖虎 realSubject; //把胖虎放到小夫家 public override void Hit() { if (realSubject == null) { realSubject = new 胖虎(); //胖虎来了 } realSubject.Hit(); //让胖虎揍大雄 } } }
典型的应用场景是,当真正的处理类不方便使用时,就可以使用代理模式。
- 远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
- 虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。
- 安全代理,用来控制真实对象的访问权限,例如上面的代理类没有送巧克力,这样送巧克力的权限就没有了。
- 智能指引,是指当调用真实的对象时,代理处理另外一些事。
作者:Cat Qi
出处:http://qixuejia.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://qixuejia.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架