C#では、クラス階層があり、最上位にいくつかの抽象基本クラスがあり、かなりの数の派生クラスがあります。これらの具象クラスのいくつかには、同じように実装されるいくつかの共通のプロパティとメソッドがあります。それは無駄だと思うので、1つの解決策は、この一般的な動作を別の抽象基本クラスに実装することかもしれません。
abstract class Control;
abstract class SquareControl: Control
{
public int SquarishProperty;
public void SquarishMethod();
};
class Window: SquareControl;
class Button: SquareControl;
ただし、階層内の他のいくつかのクラスが他の動作を共有しているが、別の基本クラスのコントロールの1つと共通点がある場合はどうなるでしょうか。おそらく、共通点がたくさんあります。これを抽象基本クラスの実装でモデル化することは非現実的になりますね。
abstract class FlashableControl: Control
{
public int FlashyProperty;
public void FlashMethod();
};
class StatusBar: FlashableControl; // but it's also a bit square too, hmm...
では、基本クラスを使用せずに、クラス間でそのような実装を共有するにはどうすればよいでしょうか。
インターフェイスの実装を別のクラスに委任し、そのクラスに目的のクラスに代わってこれらのプロパティとメソッドを実装させたいと思います。これにより、ユーザーにはStatusBarとWindowが標準のインターフェイスをサポートしているように見えますが、それを実装する何か他のものをカバーしています。
この動作を実装する集約クラスを視覚化できますが、これは適切であり、落とし穴はありますか?選択肢は何ですか?
ありがとう