《Head First Design Patterns》笔记十三:代理模式(Proxy Patt
? 概念 ????? 代理模式很好理解的一个模式,同时也是应用十分广泛的一个模式。比如常见的远程网络调用。远程客户端调用远程服务端机器的应用。给客户的感觉好像就是在本机上操作一样,这其中就是代理在做工。 ????? 我们先看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
下一篇: 《Head First Design Patterns》笔记十四:复合模式(Compound Pattern) 上一篇: 《Head First Design Patterns》笔记十二:状态模式(State Pattern) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- bash – Docker:RUN touch不会创建文件
- angularjs – 在Git for Windows Bash中,如何安装
- Scala中shouldBe和shouldEqual之间有什么区别?
- vim – Backspace,如果从光标到行首的字符是制表
- bash – 重命名/移动(mv)以name开头的多个文件
- 【K8S】基于Docker+K8S+GitLab/SVN+Jenkins+Harb
- AngularJS ui-router:测试ui-sref
- angular 插件angular-hint
- angularjs – 如何使用ng-repeat生成的表的UI Bo
- SpreadJS 全面支持 Angular2,V10.2 版本即将发布