🏋️‍♂️

builderパターンでアイス製造システムを作ってみた

2022/11/13に公開約1,200字

はじめに

builder パターンでアイス製造システムを作成してみました。
言語は TypeScript を使用しています。
builder パターンは、コンストラクトに対して複数のパラメーターが必要になる時に役に立つに立ちます。コンストラクトで全てのパラメーターを受け取るのではなく、セッターを用意することにより、コンストラクトの複雑化を防いています。

実装

以下はアイスを作るシステムです。

type iceSize = "small" | "medium" | "large";

type iceTaste = "chocolate" | "vanilla" | "grape";

type iceTopping = "chocolate" | "mint";

class Ice {
  public size: iceSize = "medium";
  public taste: iceTaste = "vanilla";
  public topping?: iceTopping;
  public cream?: boolean;
}

class IceBuilder {
  private ice: Ice;

  constructor(size: iceSize, taste: iceTaste) {
    this.ice = new Ice();
    this.ice.size = size;
    this.ice.taste = taste;
  }

  public setTopping(topping: iceTopping) {
    this.ice.topping = topping;
    return this;
  }

  public setCream() {
    this.ice.cream = true;
    return this;
  }

  public build(): Ice {
    return this.ice;
  }
}

こんな感じで使用します。

let ice: Ice = new IceBuilder("large", "chocolate")
  .setTopping("mint")
  .setCream()
  .build();

console.log(ice);

ンストラクタで基本の部分を作り、その後に追加でそれぞれの要望ごとにカスタマイズすることができます。
このようにすることで、共通の部分とオブション的な要素を分けるて管理できるようになります。

感想

「基本的には一緒だけど、ここだけ違うんだよな」という時に、とても使いやすいパターンだと感じました。
全てこのパターンを当てはめるといいというわけではないですが、自分の考え方のバリエーションの一つとして持っておくといいと思いました。

Discussion

ログインするとコメントできます