Builder

今回はBuilderパターンの復習です。
Builderパターンは構造を持つインスタンスを段階的に組み上げて作成します。
まず、全体を部分に分割し、分割した要素を組み上げていくように作成します。


Builderパターンの要素
全体を作成するのに必要な全ての要素(部分)を網羅したのがBuilderクラス
Builderクラスから要素(部分)を呼び出し、全体を構成するDirectorクラス
具体的にどういったものを作るかが記述されているConcreteBuilderクラス
これらがBuilderパターンにおける必要要素です。


実際の働き
Builderクラスには何らかの物を作るのに必要なおおまかな機能をひと通り用意してやります。
Builderクラスで定義されたメソッドをConcreteBuilderにおいて実装します。
もちろんこの実装は「具体的にどういったものを作るのか?」によって異なってきますが、どんなものを作るにせよ、Builderクラスを継承しているので作られるものの構造は大体一緒なはずです。
ですから、ConcreteBuilderではBuilderで「分割された」作業の形式を守りつつ、各々必要なメソッドを実装していけばいいわけです。


Directorクラスでは、Builderに存在するメソッドのみを用いてインスタンスを生成します。
この時ポイントとなるのが「DirectorはBuilderしか知らない」という点です。
これがBuilderパターンの拡張性につながっています。
どういうことかというと、DirectorクラスはBuilderクラスのことさえ知っていればよく、Builderを継承して作られたConcreteBuilderクラスのことを知っている必要はありません。
ですので、DirectorにBuilderを通じてどんなConcreteBuilderクラスを渡そうが、そのクラスがBuilderの仕様を守っている限りは正常に動作するという事になります。