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クラスにより隠蔽されている。