在 C++ 中,我們可以使用模板和函數指針來實現一個簡單的動態代理
#include<iostream>
#include<functional>
// 定義一個接口
class ISubject {
public:
virtual void request() = 0;
};
// 實現一個具體的主題類
class RealSubject : public ISubject {
public:
void request() override {
std::cout << "RealSubject: Handling request."<< std::endl;
}
};
// 定義一個代理類
class Proxy : public ISubject {
public:
Proxy(ISubject* subject) : m_subject(subject) {}
void request() override {
std::cout << "Proxy: Preparing for the request."<< std::endl;
m_subject->request();
std::cout << "Proxy: Request handled."<< std::endl;
}
private:
ISubject* m_subject;
};
int main() {
// 創建一個真實主題對象
RealSubject realSubject;
// 創建一個代理對象,并將真實主題對象傳遞給它
Proxy proxy(&realSubject);
// 通過代理對象發起請求
proxy.request();
return 0;
}
在這個例子中,我們首先定義了一個 ISubject
接口,然后實現了一個 RealSubject
類。接下來,我們定義了一個 Proxy
類,它也實現了 ISubject
接口。Proxy
類接收一個 ISubject
指針作為參數,并在其 request()
方法中調用真實主題的 request()
方法。
在 main()
函數中,我們創建了一個 RealSubject
對象和一個 Proxy
對象,并將 RealSubject
對象傳遞給 Proxy
對象。然后,我們通過 Proxy
對象發起請求。這樣,我們就可以在不修改 RealSubject
類的情況下,通過 Proxy
類來實現對 RealSubject
類的動態代理。