23种设计模式-13-代理模式

mac2025-10-18  6

/// <summary> /// 代理模式必须代理类和真实类实现同样的接口 /// </summary> public abstract class Person { public abstract void Buy(); } /// <summary> /// 真实想要操作的人(客户端) /// </summary> public class NeedBuyPerson : Person { public override void Buy() { Console.WriteLine("帮我买一个iPhone 11 pro max"); } } /// <summary> /// 代理对象 /// </summary> public class ProxyPerson : Person { public override void Buy() { Console.WriteLine("大家好,我是代购"); Console.WriteLine("代购买之前的操作:我需要将这次需要帮忙买的清单列一下..."); Person needBuyPerson = new NeedBuyPerson(); needBuyPerson.Buy(); Console.WriteLine("代购买之后的操作:我需要将买的东西核对检查一下..."); } } class Program { /// <summary> /// 代理模式: /// 我们想要访问某个资源,但是我们由于种种原因访问不到,需要找一个中间人来帮忙我们访问,这就是代理模式的精髓所在 /// 代理需要注意一点:我们只能真实对象去扩展,比如AOP操作,但是无法去覆盖点真实对象的实现(无法改变真实购买者的意图) /// /// 日常生活的代理模式的例子:黄牛,代购,各种外卖配送员,产品经销商都是代理...代理无处不在 /// /// 代理模式按照使用目的可以分为以下几种: /// 1.远程(Remote)代理:为一个位于不同的地址空间的对象提供一个局域代表对象,这个不同的地址空间可以是本电脑中,也可以在另一台电脑中。最典型的例子就是:客户端调用后端系统的webservice,wcf,webapi等等 /// 2.虚拟(Virtual)代理:根据需要创建一个资源消耗较大的对象,使得对象只在需要时才会被真正创建。 /// 3.Copy-on-Write代理:虚拟代理的一种,把复制(或者叫克隆)拖延到只有在客户端需要时,才真正采取行动。 /// 4.保护(Protect or Access)代理:控制一个对象的访问,可以给不同的用户提供不同级别的使用权限。 /// 5.防火墙(Firewall)代理:保护目标不让恶意用户接近。 /// 6.智能引用(Smart Reference)代理:当一个对象被引用时,提供一些额外的操作,比如将对此对象调用的次数记录下来等。 /// 7.Cache代理:为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以这些结果。 /// /// 上面的4,5,6,7其实有些小伙伴就看得出来,特别是第6条,暗示已经很明显了,这不就是AOP嘛,对的,没错 /// 在上面所有种类的代理模式中,虚拟代理、远程代理、智能引用代理和保护代理较为常见的代理模式。 /// /// 此文中的例子: /// 我就举个代购的例子吧,太多了,随时随地都是在代理 /// </summary> /// <param name="args"></param> static void Main(string[] args) { //通过代理去购买 Person proxy = new ProxyPerson(); proxy.Buy(); Console.WriteLine("End"); Console.ReadKey(); } }

 

最新回复(0)