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