在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。
在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。
首先创建一个标准的代理模式,我们需要一个抽象接口(不要这个接口也可以)
1 public interface ISubject
2 {
3 bool GetSomething();
4
5 void DoSomething();
6 }
然后新建一个类模拟去火车站买票的类(被代理类)
1 namespace 代理模式
2 {
3 class RealuSubject:ISubject
4 {
5 public RealuSubject()
6 {
7 Thread.Sleep(2000);
8 long lResult = 0;
9 for (int i = 0; i < 100000000; i++)
10 {
11 lResult += i;
12 }
13 Console.WriteLine("RealuSubject被构造...");
14 }
15
16
17 public bool GetSomething()
18 {
19 Console.WriteLine("坐火车去火车站看看余票信息...");
20 Thread.Sleep(2000);
21 Console.WriteLine("火车站,看到有票的");
22 return true;
23 }
24
25 public void DoSomething()
26 {
27 Console.WriteLine("开始排队......");
28 Thread.Sleep(2000);
29 Console.WriteLine("终于买到票了.....");
30 }
31 }
32 }
接着创建代理类,这里使用日志代理的功能来演示(也就是在代理类里加入了日志输出的代码)
1 namespace 代理模式
2 {
3 class ProxySubject:ISubject
4 {
5 private ISubject _RealuSubject = new RealuSubject();
6
7 public bool GetSomething()
8 {
9 Console.WriteLine("GetSomething start....");
10 bool bResult= this._RealuSubject.GetSomething();
11 Console.WriteLine("GetSomething end....");
12 return bResult;
13 }
14
15 public void DoSomething()
16 {
17 Console.WriteLine("DoSomething start....");
18 this._RealuSubject.DoSomething();
19 Console.WriteLine("DoSomething end....");
20 }
21 }
22 }
最后我们调用代理模式
代理模式可以实现AOP的思想,他可以实现很多种功能例如上面的日志代理,数据库代理,延迟代理,权限代理,异常代理
这些都是在代理层给加上去的一些功能,而不修改到原来的代码