一、引入
- 访问 FB:代理服务器
二、代理模式
aka Surrogate
2.1 Intent 意图
- Provide a surrogate (代理) or placeholder for another object to control access to it. 为另一个对象提供一个代理或占位符,以控制对它的访问。
- 代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用
2.2 Motivation 动机
One reason for controlling access to an object is to defer the full cost of its creation and initialization until we actually need to use it.
控制对对象的访问的一个原因是要延迟其创建和初始化的全部成本,直到我们实际需要使用它为止。即只在必要时生成开销大的对象。
Example:
An image proxy creates the real image only when the document editor asks it to display itself. The proxy forwards subsequent requests directly to the image.
只有在文档编辑器要求其显示图像时,图像代理才会创建真实的图像,代理会将后续请求直接转发到图像。
2.2 Applicability 适用性
-
A remote proxy provides a local representative for an object in a different address space. 远程代理为一个不同地址空间中的对象提供了一个本地代表.
-
A virtual proxy creates expensive objects on demand. 虚拟代理在必要时创建开销大的对象.
-
A protection proxy controls access to the original object. 保护代理可控制对原始对象的访问.
-
A smart reference is a replacement for a bare pointer that performs additional actions when an object is accessed. 在访问对象时,可以执行其他操作的智能引用是裸指针的替代品。
- counting the number of references to the real object so that it can be freed automatically when there are no more references (smart pointers).
- loading a persistent object into memory when it’s first referenced.
- checking that the real object is locked before it’s accessed to ensure that no other object can change it.
2.3 类图
2.4 Consequences 重要性
- 远程代理:隐藏对象位于不同地址空间中的事实
- 虚拟代理:优化,仅需要时才创建对象
- 保护代理 & 智能引用:提供额外功能,如访问控制
- Copy-on-write 写时复制:Copying a large and complicated object can be an expensive operation. If the copy is never modified, then there’s no need to incur this cost. By using a proxy to postpone the copying process, we ensure that we pay the price of copying the object only if it’s modified.