代理模式用于构造具有解耦组件的分布式系统。这些组件可以通过远程服务调用彼此交互。代理组件负责组件之间的通信协调。服务器将其功能(服务和特征)发布给代理。客户端从代理请求服务,然后代理将客户端重定向到其注册中心的适当服务。代理者(Broker)模式可以用于构建带有隔离组件的分布式软件,该软件通过远程服务调用进行交互。
使用场景:在客户端不能直接访问组件的情况下,通过代理组件进行访问。大致的使用环境,分为一下三类:1.直接访问IP或者组件不安全;2.访问次数特别多;3.对某些网站没有访问权限。
将要解决的问题:在环境处于情况1时,会有以下几个问题:在访问某些网站时,不想透露自己真实的IP,上网者也希望通过这种方法隐藏自己的IP,免受攻击;对组件直接访问不安全。在环境处于情况2时,会有以下几个问题:对组件的无限制访问低效,需要控制机制(代理模式)。在环境处于情况3时,会有以下几个问题:自身IP访问受限,希望突破自身IP访问限制,访问不能访问的站点,例如一些教育网站。单位或团体资源无法访问,如某大学FTP(前提是该代理地址在该资源 的允许访问范围之内)。使用教育网内地址段免费代理服务器,就可以用于对教育网开放的各类FTP下载上传,以及各类资料查询共享等服务。
解决方案:让客户机通过组件代表访问,而不是通过组件本身进行访问,这种中间的代表组件就是代理,代理提供了原件相同的接口,而且保证了对原件的正确访问,为了完成这种功能,代理保持对它所表示的原件的作用。
实例:假设要做一个电子商务的系统,这个系统无疑需要展示商品、提供购买流程。同时这个系统也需要有针对供应商的订货、发货、入账等流程。除了交易处理,还需要有评价系统管理信用;统计和推荐系统增加销售量;用户帐号系统保障安全和便利等等。这些模块和功能一般比较复杂,但是一般涉及到买家和卖家两个角色,因此往往根据这个规则,划定了两类模块,分别实施其功能,最后通过一个数据平台来存储这些数据。
一种情况是你需要调用的对象在另外一台机器上,你需要跨越网络才能访问,如果让你直接coding去调用,你需要处理网络连接、处理打包、解包等等非常复杂的步骤,所以为了简化客户端的处理,我们使用代理模式,在客户端建立一个远程对象的代理,客户端就象调用本地对象一样调用该代理,再由代理去跟实际对象联系,对于客户端来说可能根本没有感觉到调用的东西在网络另外一端,这实际上就是Web Service的工作原理。另一种情况虽然你所要调用的对象就在本地,但是由于调用非常耗时,你怕影响你正常的操作,所以特意找个代理来处理这种耗时情况,一个最容易理解的就是Word里面装了很大一张图片,在word被打开的时候我们肯定要加载里面的内容一起打开,但是如果等加载完这个大图片再打开Word用户等得可能早已经跳脚了,所以我们可以为这个图片设置一个代理,让代理慢慢打开这个图片而不影响Word本来的打开的功能。