代理模式

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

一、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、智能指引:当调用真实的对象时,代理处理另外一些事。

原文地址:https://www.cnblogs.com/qiupiaohujie/p/11967827.html