ファクトリメソッドを使用するか複数のコンストラクタを使用するかは、実際には個人的な好みです。特に、コンストラクタ参照をファクトリとして簡単に使用できるJava 8の場合(これはすべて実際には - オブジェクトのインスタンスを作成するファクトリ)。あるクラスにコンストラクタが複数存在するのはまったく問題ありません。クラス内にコンストラクタがたくさんある場合は、があまりにも多いクラスの記号で、を工場に切り替える必要はありません。クラスが特定の入力を有効にする必要があり、null
/0
が正常なデフォルト値でない場合、コンストラクターを非常に多くパラメータ化する必要があります。
しかし、避けるべきことは、オブジェクトが無効な状態で存在することです。私は工場を無視して直接new MyList()
を呼び出し、私もsetBackingArray()
を呼び出すまで、オブジェクトが、本質的に無効である可能性があるため
public class MyList {
private Object[] backingArray;
public void setBackingArray(Object[] backingArray) {
this.backingArray = backingArray;
}
}
public class MyListFactory() {
MyList newMyList(int initialSize) {
MyList list = new MyList();
list.setBackingArray(new Object[initialSize]);
return list;
}
MyList newMyList() {
MyList list = new MyList();
list.setBackingArray(new Object[defaultSize]);
return list;
}
}
これは悪いデザインの例は次のとおりです。たとえば、以下のクラスと工場を検討してください。ファクトリパターンを使用する場合は、ファクトリを経由せずに他のコードが直接オブジェクトを作成できないように注意する必要があります。 (上記のクラスは他の理由のために悪いですが、私が作ろうとしているポイントには関係ありません)。
これはまさに彼の意見のようなものです。 –
2つ以上のコンストラクタを持つのは問題ありませんが、チェーン化しないと結果が矛盾することがあります。例えば、[この質問](http://stackoverflow.com/q/25272784/217324)を参照してください。あなたの専門用語は、おそらく、 "クラス変数"ではなく "インスタンス変数"を意味します –
ビルダーパターンを意味していますか? –