2010-12-31 2 views
2

私は、私が持っているJavaクラスの構造を最適にする方法を知りました。関連するJavaクラスのこのグループを構成する方法は?

BaseData&Behavior  
| 
extends 
| 
BaseData&Behavior_WithExtraData&Behavior 
| 
extends 
| 
BaseData&Behavior_WithExtraData&Behavior_AndAlsoTwoMoreViewsAndCalculationsOnTheBaseData 

新機能が望まれている私たちのようなクラスたくなる:このクラスは、既存の階層にきちんと収まらない

BaseData&Behavior_AndAlsoTwoMoreViewsOnTheBaseData 

元の構造は三つのクラスの階層です!

コードを複製せずに、このエレガントな方法でこの新しいクラスを作成するにはどうすればよいですか? RubyやScalaでは、例えばModuleやTraitを使うことができました。

私は、AndAlsoTwoMoreViewsAndCalculationsOnTheBaseDataコードをBaseData&Behavior_AndAlsoTwoMoreViewsAndCalculationsOnTheBaseDataBaseData&Behavior_WithExtraData&Behavior_AndAlsoTwoMoreViewsAndCalculationsOnTheBaseDataの両方に委譲するクラスにすることを、Javaで行う方法だと考えています。

Javaでこれを構成するにはどうすればよいと思いますか?

おかげで、 アレックス

+1

同様の質問に対する私の答えを見てください。私はこれが役に立つと思うhttp://stackoverflow.com/questions/4565635/to-subclass-or-not-to-subclass/4566107#4566107 –

答えて

4

は私が組成物といいと思います。私は、特にこのような場合には、継承を優先します。どちらの基本クラスにもIS-Aが当てはまるようには聞こえません。あなたはデータだけを話します。行動については何もない。私はちょうどデータのために継承するのが好きではありません。

+1

+1。基本クラスから変更したい主な相違点を具体化した別のクラスを分離してみてください。拡張するのではなく、ベースを構成すると考えてください。また、Javaクラス名にアンダースコアを使用しないでください。Javaコーディングスタイルのグレインに反します。 – RMorrisey

+0

また、 "TwoMoreViews"の場合は、単にデータクラスにアクセスするユーティリティクラスを探していますか?たぶん、あなたはクラス内外で取引できる戦略の実装を探していますか? – RobertB

+0

私の例を簡略化するために@duffymo&_Behaviorの部分を中止しました。 4つのクラスすべてに関連する動作があります。 –

関連する問題