概念
代理模式很好理解的一个模式,同时也是应用十分广泛的一个模式。比如常见的远程网络调用。远程客户端调用远程服务端机器的应用。给客户的感觉好像就是在本机上操作一样,这其中就是代理在做工。
我们先看uml图
客户直接调用代理,代理再通过中间层实现对真实事务的调用。使用接口的目的是为了更加透明的操作对象。
实例
我们来建一个简单的四则运算服务,客户需要远程调用该项服务。那么我们使用webservice或则其他方法来实现对远程服务的连接代理
对于远程服务来说,基本思路是首先客户提出请求,代理接受请求,并打包该请求(转为文本格式或则二进制,如果遵循soap协议的话,就是转为xml格式),通过tcp/http发送到服务端,服务端接包并解包,响应请求,然后将结果打包发送回客户端,客户端代理收到结果并解包发回客户。如下图
代码实现
对于实现远程调用,技术各不一样,现在web service是一个比较通用的标准,不过各语言都另外有其他的访问模式,对于.net来说,我这里采用.net remoting 来实现。
首先是接口IMath.cs
然后是服务端实现:
Math.cs
Program.cs 服务端运行程序
接着就是客户端实现
MathCaculator.cs
这里MathCaculator并没有实现IMath接口,这是为了客户调用方便,当然,如果实现IMath接口的话,会更透明点。
调用程序ClientProgram.cs
开启服务端,运行客户代码,结果如下:
1+3=4
2-3=-1
4*6=24
下一篇: 《Head First Design Patterns》笔记十四:复合模式(Compound Pattern)