讓我們有一個簡單的裝飾例如:Decorator模式與調用超反模式
struct IStuff {
virtual void Info()=0;
virtual ~IStuff() { }
};
class Ugly : public IStuff {
public:
void Info() { cout << "Ugly"; }
};
class Shiny : public IStuff {
IStuff* stuff;
public:
Shiny(IStuff* stuff) {
this->stuff = stuff;
}
~Shiny() {
delete stuff;
}
void Info() {
stuff->Info(); // <------------------------------- call super?
cout << "->Shiny";
}
};
int main() {
IStuff* s = new Ugly();
s = new Shiny(s); // decorate
s = new Shiny(s); // decorate more
s->Info(); // Ugly->Shiny->Shiny
delete s;
return 0;
}
這也是Call super反模式?
調用super是一種設計模式,其中一個特定的類規定,在派生的子類中,用戶需要覆蓋方法並在特定點回調覆蓋的函數本身。
這是little different implementation設計有什麼不同嗎?
不,它不是超級呼叫,因爲你沒有調用超類,而是調用了一個包含的對象。 –