Help us understand the problem. What is going on with this article?

デザインパターン×PHP - Builder

More than 5 years have passed since last update.

はじめに

増補改訂版Java言語で学ぶデザインパターン入門を利用して、デザインパターンを学習していこうと思います。
その備忘録として、徒然にQiitaに投稿していきます。

Builderパターンの構成要素

役名 概要
Builder インスタンスを作成するためのインターフェースを定義する。「生成手段」を提供するクラス。
ConcreteBuilder Builderクラスで提供されているインタフェースを実装しているクラス。
また、最終的にできた結果を得るためのメソッドを提供している。
Director Builderクラスで定義されたインタフェースを使って、インスタンスを生成する。
ConcreteBuilderに依存することはなく、Builderのメソッドをのみ使用。
Client Builderパターンを利用するもの。

Builderパターンのクラス図

Builderパターンのクラス図

Builderパターン概要

Builder - GoFデザインパターン~STEP3:どんどん使ってみよう - PHPによるデザインパターン入門 - Do You PHP?では、以下のようにBuilderパターンを解説しています。

Builderパターンは、オブジェクトの生成に注目したパターンで、オブジェクトの「生成手順」と「生成手段」を分離するパターンです。

Builderパターンでは、まずクライアントがどのようなオブジェクトを生成するかを選択します。つまり「材料」を選択するということです。この材料は、最終的に生成されるオブジェクトの生成処理を知っています。この材料を「建築者」に渡すことで、実際のオブジェクトの生成をお願いします。

一方の「建築者」ですが、渡された材料からどの様なものができるのか知りません。ただ、自らが知っている手順に沿って、オブジェクトの生成をおこなうだけです。

1つのクラスに生成手順と生成手段をすべてまとめた場合、クラスが複雑になりすぎる傾向があります。ここでBuilderパターンを適用して生成手順を分離することで、構造がシンプルになり、再利用性も高まります。

ここにある通り、「生成手順」と「生成手段」を切り分けていることがBuilderパターンの特徴です。

ClientはBulderのメソッドを呼び出すことはなく、Directerのメソッドのみを呼び出して、その中でごりごり作業が行われている。また、Directerが知っているのはBuilderであり、Builderのメソッドを用いてインターフェースを構成している。
そして、Bulderのサブクラス(= ConcreteBuilder)がそのメソッドを具体的に実装している。

しかし、Directerはその自分が利用しているBuilderのサブクラス(= ConcreteBuilder)が「本当は」何なのかを知らない。

Builderパターンのメリット

  • DirecterがConcreteBuilderを知らないこと
    ーこのことにより、「入れ替え」ができる。部品としての価値が高い。
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away