c++设计模式概述之代理
代码写的不规范,目的是缩短文章篇幅,实际中请不要这样做。
1、模式的结构
代理模式的主要角色如下:
A、抽象主题(Subject)类:通过接口或抽象类声明真实主题和代理对象实现的业务方法。
B、真实主题(Real Subject)类:实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。
C、代理(Proxy)类:提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能
2、范例
下面 以 演员为例, 演员有替身和真实演员之分,替身上场就是代替真实演员的。
3、抽象主题
// 演员都具有的才艺 class player { public: virtual void act() = 0; };
4、 真实主题(真实演员)
// 真实演员 class player_real : public player { public: void act() { std::cout << "\n 真实演员表演中" << std::endl; } };
5、 代理
// 替身演员 class player_instead : public player { public: void act() { std::cout << "替身上场中\n"; _player_real.act(); std::cout << "替身又上场了\n\n"; } private: player_real _player_real; };
6、调用
void call_proxy() { std::unique_ptr<player_instead> ppi(new(std::nothrow) player_instead); if (!ppi) { std::cout << "\n创建代理对象失败\n"; return; } ppi->act(); }
7、 输出结果