设计模式之代理模式

时间:2022-09-09 09:29:01

在代理模式(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的思想,他可以实现很多种功能例如上面的日志代理,数据库代理,延迟代理,权限代理,异常代理

这些都是在代理层给加上去的一些功能,而不修改到原来的代码