您的位置:首页 > 其它

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

2011-08-25 10:06 696 查看
三个角色:实体接口(Subject),真实实体(RealSubject),代理实体(Proxy)

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

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

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

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

[b] 类图:[/b]



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

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

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

一、实体接口(Subject)

/// <summary>
/// 统一接口
/// </summary>
interface IWebService
{
void FirstMethod();
void SecendMethod();
}


二、真实实体(RealSubject)

class WebServiceTrue:IWebService
{
public void FirstMethod()
{
Console.WriteLine("第一个实体方法");
}

public void SecendMethod()
{
Console.WriteLine("第二个实体方法。");
}
}


三、代理实体(Proxy)

class WebServiceProxy:IWebService
{
IWebService webSerTrue;
/// <summary>
/// 构造函数
/// </summary>
public WebServiceProxy()
{
webSerTrue = new WebServiceTrue();
}
/// <summary>
/// 调用真实类的第一个方法
/// </summary>
public void FirstMethod()
{
webSerTrue.FirstMethod();
}

/// <summary>
/// 调用真实类的第二个方法
/// </summary>
public void SecendMethod()
{
webSerTrue.SecendMethod();
}
}


四、客户端

class Program
{
static void Main(string[] args)
{
//直接使用代理类运行即可
WebServiceProxy webProxy = new WebServiceProxy();
webProxy.FirstMethod();
webProxy.SecendMethod();
Console.ReadLine();
}
}


如需源码请点击 ProxyPattern.rar 下载。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: