1

私は通常、サブクラスによってクラスを継承することによってクラスを特殊化するか、クラスを分類する属性を定義することによってクラスを特殊化するかの選択を迫られる設計上の問題に出くわします。たとえば、車のコンポーネントのコレクションの場合、クラス (ホイール、タイヤ、ドアなど) を定義するか、"Type" という属性を持つ単一のクラス "CarComponent" を定義できます。さまざまなタイプの自動車コンポーネントをリストする列挙からの値。

これら 2 つのアプローチを比較するにはどうすればよいでしょうか。また、それぞれを推奨する設計パターンは何でしょうか?

ありがとう。

4

1 に答える 1

1

継承とは、振る舞いを変えることです。振る舞いを変えないのであれば、サブクラスは必要ありません。どんなに見栄えがよくても、継承は名詞ごとにクラスを作成することであってはなりません。

問題のコンテキストで CarComponent はどのような動作をしますか?

では、ホイール、タイヤ、およびドアにはどのような異なる動作がありますか?

それらの動作が異なる場合、CarComponent のサブクラスである可能性があります (ただし、必ずしもそうとは限りません。以下を参照してください)。異なる動作をしない場合、それらは単なるタイプです。

それらの動作が異なる場合、コンポジションで同じことを達成できますか? 行動を戦略に移すことはできますか?

「継承よりも構成を優先する」というのは単なるスローガンではなく、良い考えです。

于 2013-05-17T20:31:06.477 に答える