2016-10-14 4 views
1

の多数を回避しながら、私は最終的にfinal具象クラスAB多数のスーパークラス抽象クラス、AbstractClassを持って、Cなど「この漏れ」の回避しますクラス-D1およびD2は両方とも、例えばAbstractClassに広がるAbstractDを拡張する。オブジェクトの作成時には、それらの具象クラスのそれぞれは、具象クラスの1つ(おそらく同じクラス、おそらくは異なるクラス)の1つ(唯一の)インスタンスにリンクする必要があります。それぞれの具象クラスには多数のコンストラクタもあります。は、いくつかのケースでは、中間抽象的があるとして「最終的には」工場

public A(String aVariable, int anotherVariable, AbstractClass objectToBeLinked){ 
    //do some stuff with other variables; 
    owner = objectToBeLinked; 
    objectToBeLinked.addToInventory(this); 
} 

と私はそれが必ずしも欠陥ではないことを理解してくれLeaking this in Constructorを与える必要に応じて、他のコンストラクタのシグネチャ、私はそれを避けたい - スレッド用:

としてこれをコーディングベストプラクティスを使用することができます。私が見ることができる最善の解決策は、ファクトリメソッドのいくつかのフォームを実装することです:

public static void createObjectA(String aVariable, int anotherVariable, AbstractClass objectToBeLinked){ 
    a = new A(String aVariable, int anotherVariable, AbstractClass objectToBeLinked); 
    objectToBeLinked.addToInventory(a); 
} 

- それが連結される前に、オブジェクトの作成が終了したことを確実にするために(例えば、実装は明らかに変化させることができます)。しかし、多数のコンクリートクラスと多数のコンストラクタがある場合、それは膨大な量のファクトリメソッドを作成することを意味します。それが最善の解決策であれば、私は見ていないより良い方法があるのだろうかと思っています。

+1

ctorを使用しないで、 'static'工場パターンを使用してください。提案通り異なるパラメータを持つctorsが多数ある場合ビルダーパターンに置き換えてください。 –

答えて

0

最近、継承は古い帽子です。通常は継承よりも構成を使用するほうがよいでしょう。例についてはhereを参照

関連する問題