Builderパターン:オブジェクトの生成過程を抽象化するデザインパターンをクラス図にまとめる

デザインパターン

Builderパターン

Builderパターンは、オブジェクトの生成過程を抽象化するデザインパターンです。
自分なりにBuilderパターンをクラス図にまとめてみました。

Builderパターンのクラス図

Builderパターンのクラス図

Builderパターンのクラス図

Builderパターンの解説

Builderパターンは、オブジェクトの生成過程を抽象化するデザインパターンです。
Builderインターフェースを実装するBuilder1,2クラスが生成されるオブジェクト(図ではBuilding)を生成する複数のメソッドを実装し、
生成されたBuildingオブジェクトを返すメソッド(図ではgetResult)も実装します。

Directorクラスは属性にBuilderオブジェクトを持ち、constructメソッド内でBuilderオブジェクトのbuildPart1,2,3を実行します。
buildPart1→2→3という生成過程は、BuilderオブジェクトがBuilder1,2のどちらをインスタンス化したかに依らずに記述ができます。
このようにBuildingオブジェクトの生成過程(Directorのconstructメソッド)と、実際の生成処理(Builder1,2のbuildPart1,2,3)とを分離するのがBuilderパターンです。

Builderパターンをどういう場合に使うか

データの取得、整形、という生成過程で作成されるオブジェクトがあった場合に、取得先が複数あったり、整形の方法が複数あるような場合に使用できる。
例えば取得先のデータフォーマットがXMLとJSONの2パターンあるような場合が考えられる。また、新たにCSV形式のデータフォーマットが追加された場合には、
そのBuilderクラスを追加すれば追加できる。

PlantUMLでBuilderパターンのクラス図を記述する

Builderパターンのクラス図をPlantUMLで書いたときのソースです。

@startuml Builder
interface Builder{
  + {abstract} buildPart1()
  + {abstract} buildPart2()
  + {abstract} buildPart3()
}
class Builder1 implements Builder{
  + buildPart1()
  + buildPart2()
  + buildPart3()
  + getResult : Building
}
class Builder2 implements Builder{
  + buildPart1()
  + buildPart2()
  + buildPart3()
  + getResult : Building
}
class Director{
  - builder : Builder
  --
  + construct()
}
abstract class Building{

}
Director o-> Builder
Builder1 --> Building : create
Builder2 --> Building : create
@enduml

参考サイトURL

Builder パターン – Wikipedia
デザインパターン ~Builder~ – Qiita