c#中代理模式详解

这篇具有很好参考价值的文章主要介绍了c#中代理模式详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基本介绍:

  “代理”顾名思义指以他人的名义,在授权范围内进行处理事情的意思。

  在编程语言中的则解释为:为其他对象提供一种代理以控制对这个对象的访问。

  从释义上不难解读,代理本质就是一个中介,客户通过中介来访问原对象。本质就是在原对象基础上包了一层封装。

  那么问题来了,为什么不直接使用原对象,反而多此一举的创建这个第三者出来呢。下面就通过一些例子来具体说明。

举例说明:

  场景一:使用第三方登录时,比如QQ、微信登录,我们不可能直接引用第三方那边的任何源代码的东西,但可以通过封装第三方暴露出来的api才进行开发。

      在这个场景里,第三方的api就是原对象,我们做封装的类就是代理类。想要实现登录功能,就可以通过代理类来进行。这种网络通信中封装操作就是远程代理

  场景二:在日常开发中,同一个产品,可能对普通用户只开放一小部分功能,对VIP客户开放大部分功能,对管理者开放所有功能。

      针对不同权限有针对性的开放不同功能,那我们就可以在原对象基础上做封装来实现代理,封闭原对象所有功能。

      这个封装的代理类就可以控制这个对象的访问,可以给不同的用户提供不同级别的使用权限。这种有选择的开放就是保护代理

  场景三:大家在下载文件或者加载比较复杂的网站时,总会出现一个进度条或者加载loading,这个进度条或loading就使用的代理模式。

      这种使用消耗小,速度快的效果来替代表示的就是虚拟代理

  场景四:缓存Redis大家应该都使用过,它的作用就是把多终端频繁需要访问的数据从数据库临时存储在内存中共所有终端使用。这种就是缓冲代理

基本结构:

  代理模式其实没有什么固定的结构,如果是开发初期有计划的开发代理类,可以分为3个角色:

    1、抽象角色:它声明了真实对象和代理对象的共同接口,真实角色和代理角色继承自抽象角色。

    2、真实角色:继承自抽象角色,实现其真实的业务操作。

    3、代理角色:继承自抽象角色,在角色内部创建真实角色的实例,对其内函数进行加工封装操作,以供客户端使用。

  在日常开发中,使用最多的只是简单的创建一个代理类,在代理类内部对真实角色进行封装而已。

优缺点:

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

具体实例:

 1     /// <summary>
 2     /// 接口类
 3     /// </summary>
 4     public interface IImage
 5     {
 6         void Display();
 7     }
 8 
 9     /// <summary>
10     /// 真实对象
11     /// </summary>
12     public class RealImage : IImage
13     {
14         private string filename;
15 
16         public RealImage(string filename)
17         {
18             this.filename = filename;
19             LoadFromDisk();
20         }
21 
22         private void LoadFromDisk()
23         {
24             Console.WriteLine("Loading " + filename);
25         }
26 
27         public void Display()
28         {
29             Console.WriteLine("Displaying " + filename);
30         }
31     }
32 
33     /// <summary>
34     /// 代理类
35     /// </summary>
36     public class ProxyImage : IImage
37     {
38         //真实对象实例
39         private RealImage realImage;
40         private string filename;
41 
42         public ProxyImage(string filename)
43         {
44             this.filename = filename;
45         }
46 
47         public void Display()
48         {
49             if (realImage == null)
50             {
51                 realImage = new RealImage(filename);
52             }
53             realImage.Display();
54         }
55     }
56 
57     /// <summary>
58     /// 客户端
59     /// </summary>
60     class Client
61     {
62         static void Main(string[] args)
63         {
64             IImage image = new ProxyImage("图1");
65             image.Display();
66             Console.ReadKey();
67         }
68     }

c#中代理模式详解

总结:

  代理模式本质就是在客户端和目标对象之间添加中间件,通过这个中间件来有选择性的、有目的性的实现原目标对象中的功能。

  代理模式可以应用于网络通信、缓存处理、权限控制等多种场景。

  在日常编程中,代理其实无处不在。文章来源地址https://www.toymoban.com/news/detail-746148.html

到了这里,关于c#中代理模式详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java 代理模式详解

    本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远! 代理模式是一种比较好理解的设计模式。简单来说就是 我们使用代理对象来代替对真实对象(real

    2024年02月06日
    浏览(26)
  • Java 代理模式详解,静态代理与动态代理的区别及优缺点

    代理模式是一种常用的设计模式,它允许通过引入一个代理对象来控制对目标对象的访问。在Java中,代理模式被广泛应用,它可以提供额外的功能,如权限检查、缓存、日志记录等,同时还能在不修改目标对象的情况下对其进行扩展。 代理模式(Proxy Pattern)是指通过代理对象

    2024年02月11日
    浏览(43)
  • 【设计模式】第七章:代理模式详解及应用案例

    【设计模式】七大设计原则 【设计模式】第一章:单例模式 【设计模式】第二章:工厂模式 【设计模式】第三章:建造者模式 【设计模式】第四章:原型模式 【设计模式】第五章:适配器模式 【设计模式】第六章:装饰器模式 【设计模式】第七章:代理模式 【设计模式

    2024年02月12日
    浏览(36)
  • kube-proxy代理模式详解

    kube-proxy代理模式详解 kube-proxy当前支持以下几种代理模式: 1、userspace:最早的负载均衡方案,它在用户空间监听一个端口,所有服务通过iptables转发到这个端口,然后在其内部负载均衡到实际的Pod。该方式最主要的问题是效率低,有明显的性能瓶颈,不再推荐使用。 比如说

    2024年02月12日
    浏览(40)
  • 内网渗透代理转发详解及工具介绍

    介绍一下个人网站 欢迎各位大佬光顾 http://www.sec0nd.top 在进行渗透测试时,getshell打点之后就要进行内网渗透了,那么为了更方便的进行横向移动,需要做代理转发。今天来了解下代理转发以及相关的工具。 代理有两种形式, 映射和转发 ,最终的表现形式均为代理 端口映射

    2024年02月11日
    浏览(49)
  • c#中原型模式详解

    基础介绍:    具体可分为2个角色:     Prototype(原型类):声明一个Clone自身的接口;     ConcretePrototype(具体原型类):,实现一个Clone自身的操作。 在原型模式中,Prototype通常提供一个包含Clone方法的接口,具体的原型ConcretePrototype使用Clone方法完成对象的创

    2024年02月05日
    浏览(37)
  • c#装饰器模式详解

    基础介绍:    动态地给一个对象添加一些额外的职责。适用于需要扩展一个类的功能,或给一个类添加多个变化的情况。   装饰器,顾名思义就是在原有基础上添加一些功能。   大家都只知道如果想单纯的给原有类增加一些功能,可以直接继续该类生成一个子类就可

    2024年02月05日
    浏览(30)
  • c#组合模式详解

    基础介绍:   组合模式用于表示 部分-整体 的 层次结构 。适用于希望用户 忽略 组合对象与单个对象的 不同 ,用户将 统一地使用 组合结构中的 所有对象 的情况。   顾名思义,什么叫部分-整体,比如常见的前端UI,一个DIV标签中可以存在多个A标签、P标签、DIV标签等

    2024年02月05日
    浏览(36)
  • c#享元模式详解

    基本介绍:   享元模式的定义: 运用 共享技术 有效地支持 大量 细粒度的 对象重复使用 。适用于大量小粒度的对象造成的运行效率和内存使用效率低下的情况。   “享元”顾名思义,“享” 共享 的意思,“元” 单元 ,最小对象,零部件的意思。   即从字面意思

    2024年02月06日
    浏览(29)
  • c#桥接模式详解

    基础介绍:   将 抽象部分 与它的 实现部分 分离,使它们都可以 独立地变化 。适用于不希望在抽象和实现部分之间有固定的绑定关系的情况,或者类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充的情况。   将抽象部分与实现部分分离,使它们都可以独

    2024年02月05日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包