发表于: 2018-01-17 23:58:53
1 614
今天完成的事
代理模式
为了深刻点理解代理模式,我们先来看一个 Demo ,
首先这个 Demo 是用来测试 QQ 号码是否在线,
这里涉及到的内容是 Web 服务的使用,
这个 Web 服务所在地址为:
http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx
如果有不懂 Web 服务的,还可以查看笔者一篇涉及 Web 服务的文章,
http://www.cnblogs.com/QinBaoBei/archive/2010/03/30/1700898.html
然后,我便将上面的验证 QQ 是否在线的这个 Web 服务引入到我的项目中,
并且给这个 Web 服务命名为 WebService.TestQQ
然后就是来编写类了,
主要是一个 TestResult 类,这个类的作用就是来完成访问 Web 服务,返回验证结果,
其具体代码如下:
namespace ProxyQQ
{
public static class TestResult
{
public static string GetResult(string qqNum)
{
//调用引用的 Web 服务(自命名为 WebService.TestQQ)
WebService.TestQQ.qqOnlineWebService testQQ =
new WebService.TestQQ.qqOnlineWebService();
return testQQ.qqCheckOnline(qqNum);
}
}
}
然后就是要编写客户端了,我这里使用的是一个 WinForm 应用程序来实现的,
这个项目中唯一一个窗体 TestQQ 的代码如下
using System;
using System.Windows.Forms;
namespace ProxyQQTest
{
public partial class TestQQ : Form
{
public TestQQ()
{
InitializeComponent();
}
private void btnQuery_Click(object sender, EventArgs e)
{
//调用 ProxyQQ 命名空间下的静态类 TestResult 的
//静态方法 GetResult()来判断 QQ 状态
string result =
ProxyQQ.TestResult.GetResult(txtQQNum.Text.Trim());
string msg = String.Empty;
switch (result)
{
case "Y":
msg = "该 QQ 在线";
break;
case "N":
msg = "该 QQ 离线";
break;
case "E":
msg = "该 QQ 号码不存在";
break;
case "A":
msg = "商业用户验证失败";
break;
case "V":
msg = "免费用户超过数量";
break;
default:
break;
}
MessageBox.Show(msg, "提示",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}
}
下面就来查询一下 QQ 号码咯
然后我让我的 QQ 上线再来查看
好,说了这么多了,感觉是在介绍 Web 服务似的,
但是请不要误会,本篇博文是来介绍代理模式的,而非 Web 服务,
下面我们就从上面的这个 Demo 来谈谈代理模式,
其实上面谈到的 Demo 就是代理模式的一种最典型的应用--远程代理,
先来看上面的 Demo 中,我添加的那个 Web 服务,
当我在我的项目中添加了 Web 服务后呢,
大家可以看到会在项目中自动生成一个 WebReference 的文件夹以及一些文件,
其实这些就是代理了,
您看我在应用程序中只是使用了下面一丁点代码,
//调用引用的 Web 服务(自命名为 WebService.TestQQ)
WebService.TestQQ.qqOnlineWebService testQQ =
new WebService.TestQQ.qqOnlineWebService();
return testQQ.qqCheckOnline(qqNum);
我们在客户端只需要通过这一丁点代码就可以完成访问 Web 服务并且返回结果,
也可以说成是客户端通过调用代理来完成远程访问并返回结果。
下面就来看看什么是远程代理?
远程代理可以看做另一个服务器上的对象在本地服务器上的代表,
调用代理的方法就会被代理通过网络来转发到远程执行,并且结果会通过网络返回给代理,
然后再由代理将结果转发给客户。
其实上面对远程代理的定义还是不明确的,就拿 Web 服务来说的话,您也可以调用你自己的项目中的 Web 服务的,
所以完整的远程代理的定义是,为一个不同地址空间中的对象提供一个局部代表对象,
不过这个不同的地址空间呢可以在您的本地机也可以在远程机器上,
所以在上面的 Demo 中,
就可以把 WebService.TestQQ.qqOnlineWebService (代理对象)看做是
验证 QQ 号码这个对象(这里看做一个对象,它是被代理的对象)在本地机器(也就是我的项目中)上的代理对象,
而后,我在客户端中便只需要对这个代理对象进行访问和操作就 OK 了,其他的内容就交给代理对象来完成了,
这是典型的代理模式。
明天计划的事
针对没家公司的要求对简历进行优化后再投,提高命中率
遇到的问题
无
收获
无
评论