翼度科技»论坛 编程开发 .net 查看内容

代理设计模式还不会?2分钟搞定

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
概述

代理模式就是给某一个对象提供一个代理,并由代理对象控制对原对象的引用。在一些情况下,一个客户不想或者不能直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。例如电脑桌面的快捷方式就是一个代理对象,快捷方式是它所引用的程序的一个代理
代理模式一般又分为安全代理,虚拟代理 ,远程代理。
类图


需求

老王想邀请马冬梅喝酒,抽烟,穿JK,但老王不善言谈,有点羞涩,只能让其秘书出面邀请,最后他陪马冬梅抽烟,喝酒、穿JK。
使用代理模式的代码
  1. public class ClassFlower
  2. {
  3.     public string  Name { get; set; }
  4.     public ClassFlower(string name)
  5.     {
  6.         Name=name;
  7.     }
  8. }
  9. /// <summary>
  10. /// 不管是代理还是十几人都需要做的共同动作
  11. /// </summary>
  12. public interface ISubject
  13. {
  14.     void GiveSmoking();
  15.     void GiveBeer();
  16.     void GiveJK();
  17. }
  18. /// <summary>
  19. /// 实际人
  20. /// </summary>
  21. public class RealLaoWang : ISubject
  22. {
  23.     private readonly ClassFlower _classFlower;
  24.     public RealLaoWang(ClassFlower classFlower)
  25.     {
  26.         _classFlower = classFlower;
  27.     }
  28.     public void GiveBeer()
  29.     {
  30.         Console.WriteLine($"{_classFlower.Name}:请你喝酒");
  31.     }
  32.     public void GiveJK()
  33.     {
  34.         Console.WriteLine($"{_classFlower.Name}:请你穿JK");
  35.     }
  36.     public void GiveSmoking()
  37.     {
  38.         Console.WriteLine($"{_classFlower.Name}:请你抽烟");
  39.     }
  40. }
  41. /// <summary>
  42. /// 代理人
  43. /// </summary>
  44. public class Proxy : ISubject
  45. {
  46.     private readonly RealLaoWang _realLaoWang;
  47.     public Proxy(RealLaoWang realLaoWang)
  48.     {
  49.         _realLaoWang = realLaoWang;
  50.     }
  51.     public void GiveBeer()
  52.     {
  53.         _realLaoWang.GiveBeer();
  54.     }
  55.     public void GiveJK()
  56.     {
  57.         _realLaoWang.GiveJK();
  58.     }
  59.     public void GiveSmoking()
  60.     {
  61.         _realLaoWang.GiveSmoking();
  62.     }
复制代码
  1. //C#控制台调用
  2. ClassFlower classFlower = new ClassFlower("马冬梅");
  3. RealLaoWang realLaoWang=new RealLaoWang(classFlower);
  4. // 生成代理对象,传入被代理的对象
  5. Proxy proxy=new Proxy(realLaoWang);
  6. ISubject subject = proxy;
  7. subject.GiveBeer();
  8. subject.GiveJK();
  9. subject.GiveSmoking();  
复制代码

代理模式的优缺点

优点:

  • 代理模式能够将调用用于真正被调用的对象隔离,在一定程度上降低了系统的耦合度;
  • 代理对象在客户端和目标对象之间起到一个中介的作用,这样可以起到对目标对象的保护。代理对象可以在对目标对象发出请求之前进行一个额外的操作,例如权限检查等。
缺点:

  •  由于在客户端和真实主题之间增加了一个代理对象,所以会造成请求的处理速度变慢。
  • 实现代理类也需要额外的工作,从而增加了系统的实现复杂度。
总结

到这里,代理模式的介绍就结束了,代理模式就是提供了对目标对象访问的代理,有没有发现、设计模式越往后面学习越简单,当然了,有可能也越学越晕,如果发现比较学习的比较乱、晕,建议前面的文章多看几遍,自己举例实操反复练习巩固下。

来源:https://www.cnblogs.com/mhg215/archive/2023/02/27/17151404.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具