zoukankan      html  css  js  c++  java
  • 设计模式——代理模式

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

      代理模式一个应用很广泛的模式,它是建立在对象和引用对象之间,当需要访问一个对象时,可能会因为一些特殊原因造成一些困难,这样就会用到代理模式。

    1.Subject类,这个是一个抽象接口,代理和对象的公共接口,这样任何要对对象进行访问的地方,就可以访问代理了。

     1 /// <summary>
     2 /// 公共接口
     3 /// </summary>
     4 public abstract class Subject
     5 {
     6     /// <summary>
     7     /// 定义了一个抽象方法
     8     /// </summary>
     9     public abstract void Request();
    10 }
    Subject.cs

    2.RealSubject类,定义一个真实提示,提供真实的对象和具体的操作

    1 public class RealSubject :Subject
    2 {
    3     public override void Request()
    4     {
    5         //真实的实体动作
    6     }
    7 }
    RealSubject .cs

    3.Proxy类,代理类,这里面保存了一个使用代理可以真实访问的实体,代理可以代替实体给外部进行访问,并且代理内部可以进行一些额外的操作。

     1 /// <summary>
     2 /// 创建一个代理类
     3 /// </summary>
     4 public class Proxy : Subject
     5 {
     6     //创建一个真实对象
     7     private RealSubject realSubject;
     8 
     9     /// <summary>
    10     /// 代理创建自己的方法
    11     /// 供外部进行调用
    12     /// </summary>
    13     public override void Request()
    14     {
    15         //加入真实对象没有创建,就创建一个,并且可以做一些额外的事。
    16         if (realSubject == null)
    17         {
    18             realSubject = new RealSubject();
    19         }
    20         //请求真实对象的方法
    21         realSubject.Request();
    22     }
    23 }
    Proxy .cs

    4.客户端代码,创建代理,让代理去干活。

    1 static void Main(string[] args)
    2 {
    3     //创建一个代理对象,让代理去实现方法
    4     var proxy = new Proxy();
    5     proxy.Request();
    6 }
    Main

      代理模式其实很简单,但是却非常强大,而且用处非常多,那么它会在那些场合用到呢?

      (1)远程代理:为一个对象在不同的地址空间提供局部代表,这样就可以隐藏一个对象存在于不同地址空间的事实。比如.net中的webService,这就是一个远程访问的代理。

      (2)虚拟代理:当需要续建一个开销很大的对象时,通过它来存放实例化需要很长时间的真实对象。这样就可以达到性能最优化,比如说加载一个很大的图片,可以通过代理先加载一个图片框,这样体验度会很高。

      (3)安全代理:用来控制真实对象的访问权限。比如一个网站有游客和会员的访问权限,可以用代理去判断,是否加载会员的对象。

      (4)智能指引:当调用真实对象时,代理处理一些另外的事务。

                                                              以上内容部分参考程杰的《大话设计模式》一书

  • 相关阅读:
    python中filter(),map()和reduce()的用法及区别
    Python中的单例模式的几种实现方式的及优化
    python标准库和第三方库的区别
    django和flask的区别
    wtforms
    protobuf学习
    人物FSM
    策略模式
    虚函数调用机制
    虚析构函数
  • 原文地址:https://www.cnblogs.com/Smilodon/p/3095888.html
Copyright © 2011-2022 走看看