在 C++ 中,我們可以使用模板和函數(shù)指針來實(shí)現(xiàn)一個簡單的動態(tài)代理
#include<iostream>
#include<functional>
// 定義一個接口
class ISubject {
public:
virtual void request() = 0;
};
// 實(shí)現(xiàn)一個具體的主題類
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() {
// 創(chuàng)建一個真實(shí)主題對象
RealSubject realSubject;
// 創(chuàng)建一個代理對象,并將真實(shí)主題對象傳遞給它
Proxy proxy(&realSubject);
// 通過代理對象發(fā)起請求
proxy.request();
return 0;
}
在這個例子中,我們首先定義了一個 ISubject
接口,然后實(shí)現(xiàn)了一個 RealSubject
類。接下來,我們定義了一個 Proxy
類,它也實(shí)現(xiàn)了 ISubject
接口。Proxy
類接收一個 ISubject
指針作為參數(shù),并在其 request()
方法中調(diào)用真實(shí)主題的 request()
方法。
在 main()
函數(shù)中,我們創(chuàng)建了一個 RealSubject
對象和一個 Proxy
對象,并將 RealSubject
對象傳遞給 Proxy
對象。然后,我們通過 Proxy
對象發(fā)起請求。這樣,我們就可以在不修改 RealSubject
類的情況下,通過 Proxy
類來實(shí)現(xiàn)對 RealSubject
類的動態(tài)代理。