デコレータパターンが、この例のような古いメソッドで継承できないクラスのいくつかのメソッドを拡張するための良い、簡単な標準であることは間違いありません(私はインターフェイスを使用していません)できるだけ短くする)。C++でデコレータパターンを使うべきでしょうか?
using System;
class Human { ... }
class Father {
public string Info() {
return "John";
}
}
class Son : Human { // decorating Father
Father f = new Father();
public string Info() {
return "I am son of "+f.Info();
}
}
class Program {
public static void Main() {
Son s = new Son();
Console.WriteLine(s.Info()); // I am son of John
Console.ReadKey();
}
}
しかし、我々はC++で多重継承を持っているので、私たちは父情報を(非表示)の代わりに、それを飾ることができます。
#include <string>
#include <iostream>
using namespace std;
class Human { ... };
class Father {
public:
string Info() {
return "John";
}
};
class Son : public Human, Father { // inherit both
public:
string Info() {
return "I am son of " + Father::Info();
}
};
int main() {
Son* s = new Son();
cout << s->Info(); // I am son of John
cin.get();
return 0;
}
私は多くのパターンの理由は、AD-を移動させることであることを理解再使用可能なクラスからアドホッククラスへの論理をホールドするので、再利用可能なクラスはアドホックコードで混乱する必要はありません。しかし、これは多重継承でも実現できます。
デコレーションが複数の継承より優れているところを説明することができますか?
に役立ちます。静的継承階層で定義するのではなく、動的にプロセッサを作成する必要があります。 –
複数の継承がある場合は、それを使用できます。 –