C++与设计模式(8)——代理模式
来源:互联网 发布:手机淘宝商城首页登录 编辑:程序博客网 时间:2024/06/06 12:26
代理模式
为其他对象提供一种代理以控制对这个对象的访问
代理模式有这几种分类:
1. 远程代理(Remote Proxy)为一个位于不同的地址空间的对象提供一个本地的代理对象。这个不同的地址空间可以是在同一台主机中,也可是在另一台主机中,远程代理又叫做大使(Ambassador)
2. 虚拟代理(Virtual Proxy)根据需要创建开销很大的对象。如果需要创建一个资源消耗较大的对象,先创建一个消耗相对较小的对象来表示,真实对象只在需要时才会被真正创建。
3. 保护代理(Protection Proxy)控制对原始对象的访问。保护代理用于对象应该有不同的访问权限的时候。
4. 智能指引(Smart Reference)取代了简单的指针,它在访问对象时执行一些附加操作。
5. Copy-on-Write代理:它是虚拟代理的一种,把复制(克隆)操作延迟到只有在客户端真正需要时才执行。一般来说,对象的深克隆是一个开销较大的操作,Copy-on-Write代理可以让这个操作延迟,只有对象被用到的时候才被克隆。
这里给出一个虚拟代理的例子:
class Widget//提供接口{public: virtual void Show(){}};class MyWidget : public Widget{public: MyWidget(string name):m_name(name) { cout << "create Widget" << endl; } ~MyWidget(){} void Show(){cout << m_name << "'s widget is showing" << endl;}protected: string m_name;};class WidgetProxy : public Widget{public: WidgetProxy(string name):myWidget(nullptr),m_name(name) { cout << "create Proxy" << endl; } ~WidgetProxy(){delete myWidget;} void Show()//在使用时才创建对象 { if(myWidget == nullptr) myWidget = new MyWidget(m_name); myWidget->Show(); }protected: MyWidget *myWidget; string m_name;};
使用:
int main(){ WidgetProxy widget("233"); widget.Show();}
这样我们在真正使用它时才去创建它的资源。
与代理模式相仿的还有其他两种模式:
1. 适配器模式Adapter
与代理不同适配器实现了与其所适配的对象不同功能的接口,而代理只是代替的使用原对象接口
2. 装饰器模式Decorator
装饰器模式负责为对象添加新的功能,而代理模式则是控制对象的访问
0 0
- C++与设计模式(8)——代理模式
- 设计模式——代理模式(C++)
- 设计模式(8)——代理模式
- 设计模式—代理模式(四)
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式之代理模式(C++)
- 设计模式C++实现(8)——代理模式
- 设计模式C++实现(8)——代理模式
- 设计模式C++实现(8)——代理模式
- leetCode练习(127)
- 51nod-【1094 和为k的连续区间】
- USB鼠标抓包数据
- 用单向链表计算多项式的加法
- 简易教程
- C++与设计模式(8)——代理模式
- mongguoDB配置
- Tenth Line(leetcode195-t4.sh)
- 嵌入式学习心得(四)
- 矩阵乘法
- 将集合转换成字符串,中间以逗号隔开
- 链表
- ADD_MONTHS和numtodsinterval浅析
- Android 那些不起眼、却意义非凡的犄角旮旯!