极速理解设计模式系列:3.代理模式(Proxy Pattern)

简介:

三个角色:实体接口(Subject),真实实体(RealSubject),代理实体(Proxy)

       实体接口(Subject):目标对象的抽象接口

       真实实体(RealSubject):目标对象的具体实现.

          代理实体(Proxy):同样实现Subject接口,但是在方法内部是调用真实实体的相应方法实现功能点,而非代理类自己去处理事务。


         实现思路:真实实体和代理实体都继承并且实现同一个接口,在客户端调用代理实体以达到调用真实实体的目的。

 类图:       


        应用场景:在Silverlight中会用到WebService服务,WebService的原理是在客户端本地生成一个代理类,客户端调用WebService方法的时候,通过代理类去访问真实类的结果,这是代理模式中的远程代理模式。

        分析:真实WebService类是部署在服务器上面的,本地需要有一个类来代理服务器上得WebService类的各种功能方法,实际上本地代理类并没有具体的处理过程,它是让服务器端的相应的真实实体类的对应方法运行。

        下面我们在控制台程序去演示一下如何使用Proxy Pattern:

        一、实体接口(Subject)

 

 
 
  1. /// <summary> 
  2. /// 统一接口 
  3. /// </summary> 
  4. interface IWebService 
  5.     void FirstMethod(); 
  6.     void SecendMethod(); 
       二、真实实体(RealSubject)

 

 
  1. class WebServiceTrue:IWebService 
  2.     public void FirstMethod() 
  3.     { 
  4.         Console.WriteLine("第一个实体方法"); 
  5.     } 
  6.  
  7.     public void SecendMethod() 
  8.     { 
  9.         Console.WriteLine("第二个实体方法。"); 
  10.     } 

        三、代理实体(Proxy)

 

 
  1. class WebServiceProxy:IWebService 
  2.     IWebService webSerTrue; 
  3.     /// <summary> 
  4.     /// 构造函数 
  5.     /// </summary> 
  6.     public WebServiceProxy() 
  7.     { 
  8.         webSerTrue = new WebServiceTrue(); 
  9.     } 
  10.     /// <summary> 
  11.     /// 调用真实类的第一个方法 
  12.     /// </summary> 
  13.     public void FirstMethod() 
  14.     { 
  15.         webSerTrue.FirstMethod(); 
  16.     } 
  17.  
  18.     /// <summary> 
  19.     /// 调用真实类的第二个方法 
  20.     /// </summary> 
  21.     public void SecendMethod() 
  22.     { 
  23.         webSerTrue.SecendMethod(); 
  24.     } 

        四、客户端

 

 
  1. class Program 
  2.     static void Main(string[] args) 
  3.     { 
  4.         //直接使用代理类运行即可 
  5.         WebServiceProxy webProxy = new WebServiceProxy(); 
  6.         webProxy.FirstMethod(); 
  7.         webProxy.SecendMethod(); 
  8.         Console.ReadLine(); 
  9.     } 

        如需源码请点击 ProxyPattern.rar 下载。


本文转自程兴亮 51CTO博客,原文链接:http://blog.51cto.com/chengxingliang/826943


相关文章
|
3月前
|
设计模式 算法 Java
行为型设计模式-策略模式(Strategy Pattern)
行为型设计模式-策略模式(Strategy Pattern)
|
3月前
|
设计模式 C#
设计模式之代理模式(Proxy)
设计模式之代理模式(Proxy)
|
3月前
|
设计模式
设计模式-代理模式
设计模式-代理模式
|
3月前
|
设计模式 数据安全/隐私保护
设计模式之代理模式
设计模式之代理模式
|
1月前
|
设计模式 JavaScript Java
设计模式——代理模式
一文讲清楚设计模式中的代理模式
21 0
设计模式——代理模式
|
1月前
|
设计模式 Java 数据库连接
【重温设计模式】代理模式及其Java示例
【重温设计模式】代理模式及其Java示例
23 2
|
3月前
|
设计模式 算法
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
39 1
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
|
5天前
|
设计模式 存储 Java
Java设计模式:解释一下单例模式(Singleton Pattern)。
`Singleton Pattern`是Java中的创建型设计模式,确保类只有一个实例并提供全局访问点。它通过私有化构造函数,用静态方法返回唯一的实例。类内静态变量存储此实例,对外仅通过静态方法访问。
12 1
|
1月前
|
设计模式 uml
设计模式之代理模式
设计模式之代理模式
|
1月前
|
设计模式 Arthas Java
【设计模式】代理模式
【设计模式】代理模式