代理模式,Proxy Pattern:为某个对象提供一种代理机制,控制对这个对象的访问。
#include<iostream>
//抽象主题类
class Subject {
public:
virtual void work() = 0;
};
//具体主题类
class ConcreteSubject : public Subject {
public:
void work() {
std::cout << "Consubject Work" << std::endl;
}
};
//代理类
class Proxy : public Subject {
public:
Proxy(ConcreteSubject* concrete_subject) :
_pConcreteSubject(concrete_subject) {
}
~Proxy() {
delete _pConcreteSubject;
_pConcreteSubject = NULL;
}
void before_work() {
std::cout << "before work" << std::endl;
}
void after_work() {
std::cout << "after work" << std::endl;
}
void work() {
if (_pConcreteSubject == NULL) {
_pConcreteSubject = new ConcreteSubject;
}
before_work();
_pConcreteSubject->work();
after_work();
}
private:
ConcreteSubject* _pConcreteSubject;
};
int main(int argc, char* argv[]) {
ConcreteSubject* concrete_subject = new ConcreteSubject;
Proxy* proxy = new Proxy(concrete_subject);
proxy->work();
delete concrete_subject;
delete proxy;
return 0;
}
输出:
before work
Consubject Work
after work