• 代理模式


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

    一、UML结构图

    二、示例代码

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 
     6 namespace 代理模式
     7 {
     8     class Program
     9     {
    10         static void Main(string[] args)
    11         {
    12             //对访问端来说,只知道访问代理,不需要知道实际主题是谁。
    13             //例如:只需要和代理索要相应资料即可。
    14             Proxy p = new Proxy();
    15             p.SendMessage();
    16             p.ReceiveMessage();
    17 
    18             Console.ReadLine();
    19         }
    20     }
    21 
    22 
    23     /// <summary>
    24     /// Subject主题类,用于定义需要代理的接口,
    25     /// 例如:找代理办理护照,这里定义办理护照所需要的一切资料和手续
    26     /// </summary>
    27     public abstract class ProxySubject
    28     {
    29         public abstract void SendMessage();//发送消息
    30         public abstract void ReceiveMessage();//接收消息
    31     }
    32 
    33     /// <summary>
    34     /// 需要代理的真实类
    35     /// 例如:真实需要办理护照的人,提供一切手续所需的各种资料
    36     /// </summary>
    37     public class RealSubject1:ProxySubject
    38     {        
    39         public override void ReceiveMessage()
    40         {
    41             Console.WriteLine("RealSubject1 收到信息!");
    42         }
    43 
    44         public override void SendMessage()
    45         {
    46             Console.WriteLine("RealSubject1 发送信息");
    47         }
    48     }
    49 
    50     /// <summary>
    51     /// 代理类
    52     /// 例如:接过真实办理护照人的信息,检查后,提供给相应部门(客户端)
    53     /// </summary>
    54     public class Proxy:ProxySubject
    55     {
    56         ProxySubject ps = null;
    57         public Proxy()
    58         {
    59             //指定为谁代理
    60             ps = new RealSubject1();
    61         }
    62 
    63         public override void ReceiveMessage()
    64         {
    65             //此处可以添加一些代理需要处理的逻辑,如访问权限等
    66 
    67             //然后再调用实际对象的信息
    68              ps.ReceiveMessage();
    69         }
    70         public override void SendMessage()
    71         {
    72             //此处可以添加一些代理需要处理的逻辑,如访问权限等
    73 
    74             //然后再调用实际对象的信息
    75              ps.SendMessage();
    76         }
    77     }
    78 
    79 }
    示例代码

    三、代理模式应用

     1、远程代理:如WebService,在应用程序中访问WebService时,需要添加一个引用,生成WebReference的文件夹和一些文件,其实这些文件就是代理,代理解决远程访问的问题。

    2、虚拟代理:例如通过浏览器打开某个网页时,图片太大,没有加载完毕时,浏览器先用其它虚拟图片代替,此时虚拟图片存储了真实图片的路径和尺寸。

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

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

  • 相关阅读:
    图片完全填充CardView区域
    调用系统相机拍照并展示
    Android开发之加载GIF图片
    使用SatelliteMenu创建动画菜单
    swift中简单KVC和KVO的使用
    swift GCD的简单使用
    swift协议的使用方法和注意事项
    swift找window,导航栏的简单使用,Controller通过闭包传值简单示例
    swift中闭包的使用
    swift中UIButton的使用
  • 原文地址:https://www.cnblogs.com/qiupiaohujie/p/11967827.html
Copyright © 2020-2023  润新知