structural_patterns/proxy.rst
.. _proxy:
.. contents:: 目录
在某些情况下,一个客户不想或者不能直接引用一个对 象,此时可以通过一个称之为“代理”的第三者来实现 间接引用。代理对象可以在客户端和目标对象之间起到 中介的作用,并且可以通过代理对象去掉客户不能看到 的内容和服务或者添加客户需要的额外服务。
通过引入一个新的对象(如小图片和远程代理 对象)来实现对真实对象的操作或者将新的对 象作为真实对象的一个替身,这种实现机制即 为代理模式,通过引入代理对象来间接访问一 个对象,这就是代理模式的模式动机。
代理模式(Proxy Pattern) :给某一个对象提供一个代 理,并由代理对象控制对原对象的引用。代理模式的英 文叫做Proxy或Surrogate,它是一种对象结构型模式。
代理模式包含如下角色:
.. image:: /_static/Proxy.jpg
.. image:: /_static/seq_Proxy.jpg
.. literalinclude:: /code/Proxy/main.cpp :language: cpp :linenos: :lines: 1-
.. literalinclude:: /code/Proxy/Proxy.h :language: cpp :linenos: :lines: 1- :emphasize-lines: 24-26
.. literalinclude:: /code/Proxy/Proxy.cpp :language: cpp :linenos: :lines: 1- :emphasize-lines: 14-16,33-37
运行结果:
.. image:: /_static/Proxy_run.jpg
代理模式的优点
代理模式的缺点
根据代理模式的使用目的,常见的代理模式有以下几种类型:
EJB、Web Service等分布式技术都是代理模式的应用。在EJB中使用了RMI机制,远程服务器中的企业级Bean在本地有一个桩代理,客户端通过桩来调用远程对象中定义的方法,而无须直接与远程对象交互。在EJB的使用中需要提供一个公共的接口,客户端针对该接口进行编程,无须知道桩以及远程EJB的实现细节。
几种常用的代理模式
动态代理
在代理模式中,要求给某一个对象提供一个代理,并由代理对象控制对原对象的引用。代理模式的英文叫做Proxy或Surrogate,它是一种对象结构型模式。