の多数を回避しながら、私は最終的にfinal
具象クラスA
、B
多数のスーパークラス抽象クラス、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);
}
- それが連結される前に、オブジェクトの作成が終了したことを確実にするために(例えば、実装は明らかに変化させることができます)。しかし、多数のコンクリートクラスと多数のコンストラクタがある場合、それは膨大な量のファクトリメソッドを作成することを意味します。それが最善の解決策であれば、私は見ていないより良い方法があるのだろうかと思っています。
ctorを使用しないで、 'static'工場パターンを使用してください。提案通り異なるパラメータを持つctorsが多数ある場合ビルダーパターンに置き換えてください。 –