博客排版错乱问题
1、规范定义:为其它对象提供一种代理,以控制对这个对象的访问。
通俗的讲,就是本来C是要访问S的,但是通过加入代理P后,C不需要知道S是谁,C直接访问P,P通过自己的内部逻辑,去访问S,这就实现了C最终还是调用到了S的方法,只是不是自己直接调用,而是通过代理P调用的。
2、代理模式结构图:
说明:
(1)通过继承Subject,RealSubject和Proxy有相同的功能方法,故对RealSubject的某个方法的访问,就能转为Proxy同名的方法调用。
(2)Proxy类内必须保存一个对RealSubject的引用,这在Proxy实例化时,需要同时对这个RealSubject实例化。通过这个引用,才能在Proxy的功能方法里面调用RealSubject的同名方法,从而实现代理的功能。
3、代理模式的适用场景:
(1)远程代理,也就是为一个对象在不同地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。WebService就是代理模式的应用。
(2)虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。这样可以达到性能的最优化。比如,打开一个很大的HTML网页时,里面虽然有很多图片和文字,但是还是可以很快打开,开始你看到的是所有的文字,图片其实是一张张下载下来的。那些未打开的图片框,就是通过虚拟代理替代了真实的图片,此时代理保存了真实图片的地址和尺寸。
(3)安全代理,用来控制真实对象访问时的权限。用于真实对象应该有不同的访问权限时。
(4)智能指引,是指当调用真实对象时,代理处理另外一些事情。如计算真实对象的引用次数,这样当对象没有引用时,可以自动释放它;或当第一次引用一个对象时,把它加入内存等等。它们都是通过代理在访问一个对象时附加一些内务处理。
4、小例子:追求者通过代理,向被追求者发起追求,比如送巧克力,送花,送洋娃娃。显然,追求者和代理都应该继承同一个类,拥有同名的功能方法。功能方法包括:送巧克力,送花,送洋娃娃。
(1)UML图
(2)code:依次为:Client,Gift,Persuit,Proxy,SchoolGirl