代理模式

概述

在软件系统中,有些对象有时候由于跨越网络或者其他的障碍,而不能够或者不想直接访问另一个对象,如果直接访问会给系统带来不必要的复杂性,这时候可以在客户程序和目标对象之间增加一层中间层,让代理对象来代替目标对象打点一切。这就是本文要说的Proxy模式。

意图

为其他对象提供一种代理以控制对这个对象的访问。

image

  通过上面的图片,我们可以看到,通过增加代理来解耦A与C之间的调用,这样可以封装原来C调用A的一些相关细节,转换成C直接调用B中封装后

的代理方法,则等同于访问A。对于WebService的远程调用时,如果我们使用添加Web引用的方式,那么WebService会为我们自动生成代理类的,这个

我这里就不演示了,包括Castle中的AOP等实现方案都是基于动态代理的机制来实现,当然思路都是这样的,WCF中也有用到代理的思想。

前面我们讲述了外观模式中的关于动态代理中的一些实现,当然代理模式与外观模式的侧重点还是有所不同,外观模式是将众多细粒度的功能,封

装成一个粗粒度的功能,供客户应用程序使用。而代理模式,为其他对象提供一个代理类,通过该代理类来完成目标对象的访问,代理模式相对外观模式来

说,关键不同是在内部,外观我们知道是将细粒度的功能进行简单封装,而代理模式则是内部实现很复杂,其复杂性主要体现在来自如下的几类复杂性:

         image

         可能上述的复杂性还不完整,例如还可能有目前的比较新兴的大数据量的虚拟代理或者是智能代理,这方面由于自身不足,所以还无法讲述。

         本文将会结合举例说明上述的几类代理的复杂性的简单说明,希望能说明清楚。

代理模式使用总结

通过上面的webservice的讲述,我想大家对代理模式还是会有些陌生,其实代理模式我们前面也说道,代理是将目标对象的复杂性进行封装,通过代理来

完成调用,那么我们针对前面的客户端调用的目标类型的接口定义,并且目标对象要实现这个接口,代理类也要实现这个接口。

下面来总结下代理模式与外观模式的区别:

1、外观模式也是屏蔽复杂性的,但是外观模式不会实现客户端调用的目标类型接口。

2、一般客户端调用外观模式的方法都是直接调用。

3、代理模式中对客户端目标对象类型抽象接口具体化了。

4、外观模式是代理模式中一种特殊的子级模式(广泛的,非约束性)。

http://www.cnblogs.com/hegezhou_hot/archive/2011/02/20/1958965.html

http://www.cnblogs.com/Terrylee/archive/2006/05/18/403382.html

原文地址:https://www.cnblogs.com/linjiancun/p/2104921.html