[英]Using Adapter Design Pattern
我正在努力實現適配器設計模式以利用現有的類。 我的問題是,這些類的工作原理幾乎相同,但是它們的名稱不同,而另一個的功能較少。
例如,每個Work類和Homework類都有一個執行相同功能的函數,即doWork()和doHomework() 。
我可以將它們鏈接到Task界面中的doThis() 。 但是, 工作類不這樣做()函數,而作業類有它。 我將如何處理? 只是沒有執行? 有沒有更好的方法?
class Task {
public:
virtual int doThis() = 0;
virtual bool done() = 0;
};
class Work {
public:
Work();
int doWork();
};
class Homework {
public:
Homework();
int doHomework();
bool done();
bool isDone;
};
class WorkAdapter : public Task, private Work {
public:
WorkAdapter();
int doThis() {
return doWork();
}
virtual bool done() {
// Is this okay not to implment this?
}
};
class HomeworkAdapter : public Task, private Homework {
public:
HomeworkAdapter();
int doThis() {
return doWork();
}
virtual bool done() {
return isDone;
}
};
int main() {
Task *homework = new HomeworkAdapter();
Task *work = new WorkAdapter();
homework->doThis();
bool isHomeworkDone = homework->done();
work->doThis();
bool isWorkDone = work->done(); // This would never be called in my implementation...
}
使用多重繼承的適配器實現(對於目標是公共的,對於適應者是私有的)是一種有效的方法。
只需注意函數的返回類型:
class HomeworkAdapter : public Task, private Homework {
public:
HomeworkAdapter() {}
int doThis() override { // make sure you override target member
return doWork(); // and return value as expected
}
bool done() override {
return isDone;
}
};
提示:不需要在派生類中指定virtual。 相反,值得使用重寫,只是為了避免參數或返回類型不匹配時出現細微問題。
如果沒有功能可用於適應適配器中的done()
,則必須對其進行仿真。 因此,不僅要更改名稱,而且還要確保類似的行為:
class WorkAdapter : public Task, private Work {
bool isdone; // functionality to add
public:
WorkAdapter() : isdone(false) {}
int doThis() override {
auto rc = doWork();
isdone = true; // once it's done, it's done ;-)
return rc;
}
bool done() override {
return isdone; // you must add this
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.