Builder パターン

デザインパターンちゃんと勉強をしようと思ったので結城さんの本を 1 つ 1 つ実装してみる。 前回の Prototypeからの続き。

オブジェクトの生成過程を抽象化することによって、動的なオブジェクトの生成を可能にする。

抽象化って言われて色々な例えがでてくるけど振る舞いを委譲って形でお願いしちゃうといういうのはおもしろいです。普段の設計とかにも活かしたくなる。というかもう活きた。

クラス図

Builder PlantUML

<?php
// Director.php
    public function construct()
    {
        $this->builder->makeTitle("Greeting"); // タイトル
        $this->builder->makeString("朝から昼にかけて");
        $this->builder->makeItems([
            "おはようございます。",
            "こんにちは。"
        ]);
        $this->builder->makeString("夜に");
        $this->builder->makeItems([
            "こんばんは。",
            "おやすみなさい。",
            "さようなら。"
        ]);
        $this->builder->close(); // 文章を完成
    }

上記のような処理は、Diretor 側が呼び出した Builder に規定をして、その Builder 自体が違うものになると結果が変わるというものを表している。

自分としての理解・疑問

  • 処理を規定するということだけを集中する箇所と実装する部分を分けるのが大事そう。
  • 処理を規定する部分も Director 役がいる事で Builder の振り分けの修正などを簡単にしているように感じる。

参考