• 设计模式笔记5:代理模式


    1.1 定义

      为其他对象提供一种代理,以控制这个对象的访问。

      其实就是两个类实现一个接口或抽象类,在A类中实例化B类的对象,那么A类的就能代理B类实现接口的方法。

    1.2  类图

      Porxy代理类中声明了RealSubject类的实例,在需要调用他们都实现的方法时,调用RealSubject实例的方法。就实现了对RealSubject的代理。

    1.3  代码

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace 代理模式
     8 {
     9     abstract class Subject
    10     {
    11         public abstract void Request();
    12     }
    13 
    14     class RealSubject : Subject
    15     {
    16         public override void Request()
    17         {
    18             Console.WriteLine("真实的请求");
    19         }
    20     }
    21 
    22     class Proxy : Subject
    23     {
    24         RealSubject rs;
    25 
    26 
    27         public override void Request()
    28         {
    29             if (rs == null)
    30             {
    31                 rs = new RealSubject();
    32             }
    33             rs.Request();
    34         }
    35     }
    36 
    37 
    38 }
    View Code

    调用:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace 代理模式
     8 {
     9     class Program
    10     {
    11         static void Main(string[] args)
    12         {
    13             Subject s = new Proxy();
    14             s.Request();
    15 
    16         }
    17     }
    18 }
    View Code

    1.4  总结

    代理模式的4大应用场景:

      1、远程代理,为一个对象在不同地址空间提供局部代表。

      2、虚拟代理,根据需要创建开销很大的对象。浏览器中的图片下载,就是用这个来优化的。

      3、安全代理,控制真实访问对象的权限。

      4、只能引用,调用真实对象是代理可以帮我们做额外的事情,例如记录引用次数,释放对象等。

      

  • 相关阅读:
    MSDTC服务出错
    jquery.lazyload.js实现图片延迟加载——wordpress图片随滚动条渐显效果
    js:警惕firstChild
    基于jquery的表格排序
    jquery JSON的解析方式
    用JS jquery取float型小数点后两位
    JQuery之append和appendTo的区别,还有js中的appendChild用法
    js笔记之Math random()、ceil()、floor()、round()
    Oracle笔记
    STL: equal
  • 原文地址:https://www.cnblogs.com/simple-blog/p/4141402.html
Copyright © 2020-2023  润新知