kakke18’s blog

ゆるふわ学生エンジニア

Builder-複雑なインスタンスを組み上げる-

Java言語で学ぶデザインパターン入門 の第7章を参考にしました。

Builderパターンとは

本書には以下のように記載されています。

構造を持ったインスタンスを組み上げていくデザインパターン

つまり、一気に完成品を作成するのではなく、全体を構成している各部品を作り、 段階を踏んで組み上げていくことです。

実装

こちらを参考にしてください。

登場人物

  • Builder役(Builderクラス)

    インスタンスを生成するためのインターフェースを定める

  • ConcreteBuilder役(TextBuilderクラス、HTMLBuilderクラス)

    Builde役のインターフェースを実装する

  • Director役(Directorクラス)

    Builder役のインターフェースを使ってインスタンスを生成する

  • Client役(Mainクラス)

    Builderパターンを利用する

実装のポイント

  • Directorクラスのコンストラクタの引数は、Builder型だが、Builderクラスは抽象クラスなので、 Bulder型のインスタンスが引数として与えられることはない
  • インスタンス生成を行うDirector役は、Builderのメソッドのみを使うので、実際に動いているのが TextBuilderなのかHTMLBuilderなのかを意識しない

Builderパターンのメリット

  • MainクラスからBuilderクラスのメソッドは知らない
    • MainクラスはDirectorクラスのconstructメソッドを呼び出しただけでDirectorクラスが文書を生成する
    • 具体的な文書の作成手順はMainクラスが知る必要がない
  • Directorクラスは、自分が実際に利用しているクラスが何であるかを知らない
    • Builderクラスを継承したクラスであれば良い

この2点のように、オブジェクト指向プログラミングでは、「誰が何を知っているか」ということは非常に重要です。 Builderパターンでは、知らないからこそ交換可能であります (サンプルプログラムでは、Text or HTML)。 つまり、部品として機能しているということです。

まとめ

Builderパターンは、構造を持ったインスタンスを組み上げていくデザインパターンであり、 その組み上げていく過程はDirectorクラスにより隠蔽されている。