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 =
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