**代理類**實現與**真實主題**相同的接口,持有真實主題指針,客戶端通過代理間接訪問真實對象,從而在不修改真實類的情況下擴展功能(如權限控制、延遲加載、日誌記錄)。
// 抽象接口
class Subject {
public:
virtual void request() = 0;
virtual ~Subject() {}
};
// 真實主題
class RealSubject : public Subject {
public:
void request() override { cout << "RealSubject::request\n"; }
};
// 代理類
class Proxy : public Subject {
Subject *real; // 持有抽象接口,符合開閉原則
public:
Proxy(Subject *r) : real(r) {}
void request() override {
cout << "Proxy: pre-processing\n";
real->request();
cout << "Proxy: post-processing\n";
}
};
// 客戶端
int main() {
RealSubject *real = new RealSubject();
Proxy *proxy = new Proxy(real);
proxy->request(); // 通過代理訪問
delete proxy;
delete real;
return 0;
}