Builder

HTTPリクエストを組み立てる

複雑なオブジェクトを段階的に組み立てる

このデモで分かること: 必須/任意が混ざったリクエストを、メソッドチェーンで組み立てる

このデモで Builder を使う理由

  • HTTP リクエストは項目が多く、しかも大半(method・header・body)は省略できる。
  • 全部乗せのコンストラクタを増やしていくと、引数の並び順と意味を呼び出し側が覚えられなくなる(テレスコーピングコンストラクタ)。
  • Builder ならメソッド名で意味が分かり、必要な項目だけ指定して最後に build() で確定できる。

パターンなし vs このパターン(イメージ)

記事の本編ではなく、このデモ題材を if の山にした場合との対比です(疑似コード)。

パターンなし

// パターンなし(イメージ)
new HttpRequest(url);
new HttpRequest(url, method);
new HttpRequest(url, method, headers);
new HttpRequest(url, method, headers, body);
// → 引数の組み合わせの数だけコンストラクタが必要

Builder あり

// Builder
HttpRequest.builder(url)
  .method("POST")
  .header("X-Api-Key", key)
  .body(json)
  .build();
// → 必要な項目だけメソッドで指定し、build() で確定

デモ

結果

GET https://api.example.com/orders

headers

(なし)

body

(なし)

HttpRequest は Builder が build() で確定した不変オブジェクトです。

操作 → 動いたクラス / メソッド

  1. 操作: url=https://api.example.com/orders のリクエストを組み立て
  2. → HttpRequest.builder("https://api.example.com/orders") … url は必須なのでここで指定
  3. → .method("GET")
  4. → .build() … ここまでの指定をまとめた不変の HttpRequest を返す
記事は考え方・別サンプルの解説です。このページのデモ実装とはソースが異なります
(クラス名・題材はデモ用に簡略化しています)。