利用C++反射实现动态代理

1949idc 2年前 (2024-09-19) 阅读数 350 #编程语言

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

版权声明

本文内容由互联网用户自发贡献,该文观点仅代表作者本人
本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

© 2010 首途云安 & 厦门硕顿信息技术有限公司 & 闽ICP备11016866号  增值电信业务经营许可证:B1-20203020 地址:福建厦门思明区嘉禾路297号1806
高新技术企业
软件产品证书
计算机软件著作权
ISO认证
国家3A企业