「Effective Java」の推奨事項を読み、多くのパラメーターを使用するコンストラクターに直面したときに Builder パターンを使用するようにしました。
多くのパラメーターを持つメソッドにも同じパターンが適用されますか?
「Effective Java」の推奨事項を読み、多くのパラメーターを使用するコンストラクターに直面したときに Builder パターンを使用するようにしました。
多くのパラメーターを持つメソッドにも同じパターンが適用されますか?
メソッドをビルダーに変換することは可能ですが、一般的ではありません。Apache HashCodeBuilderは のように使用される 1 つの例ですが、その特定のケースでは、 のように使用されるGuava のObjects.hashCodeint hash = new HashCodeBuilder().append(a).append(b).build();
のように、varargs を持つメソッドを使用することを好むかもしれません。int hash = Objects.hashCode(a, b);
さまざまな型の多数の引数を取るメソッドは可変引数には適していないため、適切なビルダーを見つけたり、そのメソッドで行われている作業の量を減らすか、引数をカプセル化することを検討したい場合があります。他の複合型で。
Builder
オブジェクトを構築しているため、正確ではありません。
では、誰が何を知っているかをメソッドに変更するポイントは何でしょうBuilder
か?
引数が多すぎるメソッドに対して行うべきことは、たとえば次のとおりです。
varargs
Collection
を使用して同じ型引数に入れますはい、そうです。基本的に、すべてのパラメーターをカプセル化する新しい型を作成します。
これで、ビルダーを作成してから、タイプの不変バージョンを作成できます。または、「uber-parameter」タイプを変更可能にして直接渡すこともできます。後者の場合、そのようなビルダー パターンはありません。 、ただし、メソッド呼び出しの各側面を個別に指定できるという点で、メソッド呼び出し自体を構築していると見なすことができます。ビルダー パターンは実際にはこのパターンの特殊なケースにすぎないと主張することもできます。ある意味では、build()
メソッドは通常、他の場所でメソッド パラメーターとしてビルダーを使用するのではなく、ビルダー上にありますが、 2つの仕組み。
.NET フレームワークでのこの例はXmlWriterSettings
、一連のメソッドまたはコンストラクターに渡されるものです。(通常は を構築するときに使用されるという点で、一種のビルダーとして使用されXmlWriter
ます。)現在、標準Javaライブラリ内の例は考えられませんが、どこかに存在する可能性があります...
ただし、多くのパラメーターがあることに気付いた場合は、設計をもう一度見て、通常の設計の一部として、それらの一部をグループ化するべきではないかどうかを確認する価値があります。