设计模式:代理模式
代理模式:给某一个对象提供一个代理,并由代理对象控制对原对象的引用。在一些情况下,A类不想或者不能直接被引用,而代理类就可以在客户端和目标对象之间起到中介的作用。
假如我们的系统中的一个业务逻辑是java写的,现在需要在这个逻辑之前加上日志记录。但是java那边又很忙没时间修改代码,那么这个场景就可以用代理模式来解决,具体代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | public class Business { /// <summary> /// 业务逻辑代码 /// </summary> public void DoSomething() { Console.WriteLine( "开始处理业务逻辑!" ); Thread.Sleep(2000); Console.WriteLine( "业务逻辑处理成功!" ); } } /// <summary> /// Business类的代理类 /// </summary> public class ProxyBusiness { private Business _Business = new Business(); public void DoSomething() { Console.WriteLine( "在业务逻辑处理前添加日志!" ); this ._Business.DoSomething(); } } static void Main( string [] args) { //客户段调用 ProxyBusiness proxyBusiness = new ProxyBusiness(); proxyBusiness.DoSomething(); Console.ReadKey(); } |
常见的代理模式应用有以下几种:
远程代理:为一个位于不同的地址空间的对象提供一个局域代表对象。这个不同的地址空间可以是本电脑中,也可以在另一台电脑中。最典型的例子就是——客户端调用Web服务或WCF服务。
虚拟代理:根据需要创建一个资源消耗较大的对象,使得对象只在需要时才会被真正创建。
保护代理:控制一个对象的访问,可以给不同的用户提供不同级别的使用权限。
智能引用代理:当一个对象被引用时,提供一些额外的操作,比如将对此对象调用的次数记录下来等。
Cache代理:为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以这些结果。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南