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);
}