溫馨提示×

利用C++反射實(shí)現(xiàn)動態(tài)代理

c++
小樊
88
2024-09-10 18:19:19
欄目: 編程語言

在 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)代理。

0