在 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
类的动态代理。