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