设计模式C++描述----13.代理(Proxy)模式
来源:互联网 发布:用vb编写石头剪子布 编辑:程序博客网 时间:2024/05/22 00:45
一. 举例说明
我们有时打开一个网站时会发现有这样的现象,网站上的文字都显示出来了,但是上面的图片还没显示,要等一会才能显示。
这些未打开的图片的位置上,还是会有图片框和一些等待的信息的,这就是代理模式的应用,此时的代理存储了真实图片的路径和尺寸也用来显示一些友好的信息。
结构图如下:
代码实现:
- //基类
- class BigImage
- {
- public:
- BigImage(string name): m_imageName(name) {}
- virtual ~BigImage() {}
- virtual void Show() {}
- protected:
- string m_imageName;
- };
- //真实类
- class RealBigImage: public BigImage
- {
- public:
- RealBigImage(string name):BigImage(name) {}
- ~RealBigImage() {}
- void Show()
- {
- cout<<"Show big image : "<<m_imageName<<endl;
- }
- };
- //代理
- class Proxy: public BigImage
- {
- private:
- RealBigImage *m_bigImage;
- public:
- Proxy(string name):BigImage(name),m_bigImage(0)
- {}
- ~Proxy()
- {
- delete m_bigImage;
- }
- void Show()
- {
- if(m_bigImage == NULL)
- {
- cout<<"please wait ..."<<endl;
- m_bigImage = new RealBigImage(m_imageName); //代理创建真实对象
- }
- m_bigImage->Show();
- }
- };
- int main()
- {
- BigImage *image = new Proxy("SomeBigPic.jpg"); //使用代理
- image->Show(); //代理的操作
- delete image;
- return 0;
- }
说明:
BigImage:虚基类,定义了 RealBigImage 和 Proxy 的共用接口,这样就在任何使用 RealBigImage 的地方都可以使用 Proxy。
RealBigImage:定义Proxy所代表的真实实体。
Proxy:通过代理访问实体。
二. 代理模式
定义:为其他对象提供一种代理以控制对这个对象的访问。
代理模式分为四种情况:(1)远程代理,(2)虚代理,(3)保护代理,(4)智能引用。
上文介绍的是虚代理,虚代理是当创建开销很大时,通过代理来存放需要很长时间的真实对象。
代理模式的要点:
1. 代理模式与真实对象有同样的接口,这样保证在任何使用 RealSubject 的地方都可以使用 Proxy。
2. Proxy 保存一个真实象的引用,这样可以访问 RealSubject 对象。
转自:http://blog.csdn.net/lwbeyond/article/details/7556842
- 设计模式C++描述----13.代理(Proxy)模式
- 设计模式C++描述----13.代理(Proxy)模式
- Proxy代理设计模式
- 设计模式 - 代理(Proxy)
- 代理设计模式--Proxy
- Proxy(代理)设计模式
- 代理 proxy 设计模式
- 设计模式----Proxy(代理)模式
- 设计模式--代理模式(Proxy)
- 设计模式 -- 代理模式(Proxy)
- 设计模式--代理模式(Proxy)
- [设计模式]Proxy代理模式
- 设计模式--Proxy(代理模式)
- [设计模式]代理模式(Proxy)
- 设计模式-Proxy代理模式
- 设计模式--proxy代理模式
- 设计模式 -- 代理模式 Proxy
- 设计模式-代理模式(Proxy)
- 关于java 中日期类型与数据库打交道时的思考
- iOS 调试(二)
- varnish前端让后端nginx获取客户真实ip
- 用动态规划求解0-1背包问题
- EditText无法获取焦点(android:descendantFocusability用法简析 )
- 设计模式C++描述----13.代理(Proxy)模式
- Android Selector原理
- ORACLE 归档日志打开关闭方法
- hdu 1002 A+B problem ||
- C++中字符串的转换问题半解
- AS3 初始配置的笔记
- 【关于 A^x = A^(x % Phi(C) + Phi(C)) (mod C) 的若干证明】【指数循环节】
- 数学之路(4)-数学基础-幂函数图像与函数平移
- hibernate连接mysql配置文件