- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6.6.4 应用举例 public?class?Math { ????public?double?Add(double?x,double?y) ????{ ????????return?x?+?y; ????} ????public?double?Sub(double?x,double?y) ????{ ????????return?x?-?y; ????} ????public?double?Mul(double?x,double?y) ????{ ????????return?x?*?y; ????} ????public?double?Dev(double?x,double?y) ????{ ????????return?x?/?y; ????} } 6.6.4 应用举例 如果说这个计算程序部署在我们本地计算机上,使用就非常之简单了,我们也就不用去考虑Proxy模式了。但现在问题是这个Math类并没有部署在我们本地,而是部署在一台服务器上,也就是说Math类根本和我们的客户程序不在同一个地址空间之内,我们现在要面对的是跨越Internet这样一个网络障碍: 6.6.4 应用举例 这时候调用Math类的方法就没有下面那么简单了,因为我们更多的还要去考虑网络的问题,对接收到的结果解包等一系列操作。 public?class?App { ????public?static?void?Main() ????{ ????????Math?math?=?new?Math(); ????????//?对接收到的结果数据进行解包 ????????double?addresult?=?math.Add(2,3); ????????double?subresult?=?math.Sub(2,3); ????????double?mulresult?=?math.Mul(2,3); ????????double?devresult?=?math.Dev(2,3); ????} } 6.6.4 应用举例 为了解决由于网络等障碍引起复杂性,就引出了Proxy模式,我们使用一个本地的代理来替Math类打点一切,即为我们的系统引入了一层间接层,示意图如下: 我们在MathProxy中对实现Math数据类的访问,让MathProxy来代替网络上的Math类,这样我们看到MathProxy就好像是本地Math类,它与客户程序处在了同一地址空间内 6.6.4 应用举例 public?class?MathProxy { ????private?Math?math?=?new?Math(); ????//?以下的方法中,可能不仅仅是简单的调用Math类的方法 ????public?double?Add(double?x,double?y) ????{ ????????return?math.Add(x,y); ????} ????public?double?Sub(double?x,double?y) ????{ ????????return?math.Sub(x,y); ????} ????public?double?Mul(double?x,double?y) ????{ ????????return?math.Mul(x,y); ????} ????public?double?Dev(double?x,double?y) ????{ ????????return?math.Dev(x,y); ????} } 6.6.4 应用举例 现在可以说我们已经实现了对Math类的代理,存在的一个问题是我们在MathProxy类中调用了原实现类Math的方法,但是Math并不一定实现了所有的方法,为了强迫Math类实现所有的方法,另一方面,为了我们更加透明的去操作对象,我们在Math类和MathProxy类的基础上加上一层抽象,即它们都实现与IMath接口,示意图如下: 6.6.4 应用举例 public?interface?IMath { ????double?Add(double?x,double?y); ????double?Sub(double?x,double?y); ????double?Mul(double?x,double?y); ????double?Dev(double?x,double?y); } Math类和MathProxy类分别实现IMath接口: pu
文档评论(0)