外观模式
简介
参考链接 链接一
UML类图
代码示例
#include <iostream>
class ISubject {
public:
virtual void Request() = 0;
};
class RealSubject: public ISubject {
public:
virtual void Request() {
std::cout << "RealSubject::Request" << std::endl;
}
};
class ProxySubject: public ISubject {
public:
ProxySubject(ISubject *subject): subject_(subject) {}
virtual void Request() {
std::cout << "ProxySubject::Request" << std::endl;
subject_->Request();
}
private:
ISubject *subject_;
};
// 延时代理
class ProxySubject2: public ISubject {
public:
ProxySubject2(): subject_(nullptr) {}
virtual void Request() {
if (!subject_) {
subject_ = new RealSubject();
}
std::cout << "ProxySubject2::Request" << std::endl;
subject_->Request();
}
private:
ISubject *subject_;
};
int main() {
ISubject *subject = new RealSubject();
ProxySubject *proxy_subject = new ProxySubject(subject);
proxy_subject->Request();
ProxySubject2 *proxy_subject2 = new ProxySubject2();
proxy_subject2->Request();
delete subject;
delete proxy_subject;
return 0;
}