c23种设计模式10代理模式

c23种设计模式10代理模式

ID:36470076

大小:104.00 KB

页数:8页

时间:2019-05-11

c23种设计模式10代理模式_第1页
c23种设计模式10代理模式_第2页
c23种设计模式10代理模式_第3页
c23种设计模式10代理模式_第4页
c23种设计模式10代理模式_第5页
资源描述:

《c23种设计模式10代理模式》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、代理模式(ProxyPattern)直接与间接:  人们对复杂的软件系统常有一种处理手法,即增加一层间接层,从而对系统获得一种更为灵活、满足特定需求的解决方案。                                                                                                      动机(Motivate):   在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者、或者系统结构带来很多麻烦。  

2、 如何在不失去透明操作对象的同时来管理/控制这些对象特有的复杂性?增加一层间接层是软件开发中常见的解决方式。意图(Intent):     为其他对象提供一种代理以控制对这个对象的访问。 -------《设计模式》GOF结构图(Struct):                   生活中的例子:     代理模式提供一个中介以控制对这个对象的访问。一张支票或银行存单是账户中资金的代理。支票在市场交易中用来代替现金,并提供对签发人账号上资金的控制。                   代码实例:   在软件系统中,我们无时不在跨越障碍,当我们访问网络上一台计

3、算机的资源时,我们正在跨越网络障碍,当我们去访问服务器上数据库时,我们又在跨越数据库访问障碍,同时还有网络障碍。跨越这些障碍有时候是非常复杂的,如果我们更多的去关注处理这些障碍问题,可能就会忽视了本来应该关注的业务逻辑问题,Proxy模式有助于我们去解决这些问题。我们以一个简单的数学计算程序为例,这个程序只负责进行简单的加减乘除运算: 1 public class Math 2 { 3     public double Add(double x,double y) 4     { 5         return x + y; 6     } 7  8 

4、    public double Sub(double x,double y) 9     {10         return x - y;11     }12 13     public double Mul(double x,double y)14     {15         return x * y;16     }17 18     public double Dev(double x,double y)19     {20         return x / y;21     }22 }如果说这个计算程序部署在我们本地计算机上,使用就非

5、常之简单了,我们也就不用去考虑Proxy模式了。但现在问题是这个Math类并没有部署在我们本地,而是部署在一台服务器上,也就是说Math类根本和我们的客户程序不在同一个地址空间之内,我们现在要面对的是跨越Internet这样一个网络障碍:                  这时候调用Math类的方法就没有下面那么简单了,因为我们更多的还要去考虑网络的问题,对接收到的结果解包等一系列操作。 1 public class App 2 { 3     public static void Main() 4     { 5         Math math = 

6、new Math(); 6  7         // 对接收到的结果数据进行解包 8  9         double addresult = math.Add(2,3);10 11         double subresult = math.Sub(6,4);12 13         double mulresult = math.Mul(2,3);14 15         double devresult = math.Dev(2,3);16     }17 }为了解决由于网络等障碍引起复杂性,就引出了Proxy模式,我们使用一个本地的代理

7、来替Math类打点一切,即为我们的系统引入了一层间接层,示意图如下:         我们在MathProxy中对实现Math数据类的访问,让MathProxy来代替网络上的Math类,这样我们看到MathProxy就好像是本地Math类,它与客户程序处在了同一地址空间内:            1 public class MathProxy 2 { 3     private Math math = new Math(); 4  5     // 以下的方法中,可能不仅仅是简单的调用Math类的方法 6  7     public double Add

8、(double x,double y) 8     { 9    

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。