c++ 接口回调

320 阅读1分钟

Sink方式实现,利用C++的封装、继承、多态的特性。

#include <iostream>
using namespace std;

// 底层接口定义
class IDownload {
public:
    virtual void OnSuccess(const char* url) = 0;
    virtual void OnFailed(int ret) = 0;
};

class MyFile {
public:
    void setDownload(IDownload * iDownload) {
        this->iDownload = iDownload;
    }

    void load(const char* url) {
        if(url == nullptr)
            iDownload->OnFailed(0);
        else
            iDownload->OnSuccess(url);
    }
private:
    IDownload * iDownload;
};


// 上层调用者
class MyDownload : public IDownload {
public:
    void OnSuccess(const char *url) override {
        cout << url << endl;
    }

    void OnFailed(int ret) override {
        cout << "error :" << ret << endl;
    }

    void download(const char *url) {
        MyFile myFile;
        myFile.setDownload(this);
        myFile.load(url);
    }
};

int main() {
    MyDownload myDownload;
    myDownload.download("www.github,com");
//    myDownload.download(NULL);
}