《Head First Design Patterns》笔记十三:代理模式Proxy Pattern

  概念

      代理模式很好理解的一个模式,同时也是应用十分广泛的一个模式。比如常见的远程网络调用。远程客户端调用远程服务端机器的应用。给客户的感觉好像就是在本机上操作一样,这其中就是代理在做工。

      我们先看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)

上一篇 《Head First Design Patterns》笔记十二:状态模式(State Pattern)

相关文章

1.使用ajax调用varxhr;functioninvoke(){if(window.ActiveXO...
               好不容易把WebService服务器...
1新建一个工程项目用来做服务端增加一个MyService1类文件pac...
packagecom.transsion.util;importjava.io.BufferedReader;i...
再生产wsdl文件时重写描述文件1usingSystem;2usingSystem.Co...
一般情况下,使用eclipse自带的jax-ws生成webservice会自动生...