在 C++ 中,我们可以使用模板和函数指针来实现一个简单的动态代理
#include#include // 定义一个接口 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
类的动态代理。