Flyweight パターン

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

等価なインスタンスを別々の箇所で使用する際に、一つのインスタンスを再利用することによってプログラムを省リソース化することを目的とする。

クラス図

Flyweight PlantUML

自分としての理解・疑問

  • データを一度「キャッシュ」して使いまわそうという考え方
  • ファイル IO が大量に発生するようなスクリプトで同じような仕組みは作ったことがあったけどクラス構造ではなかったので、確かにクラスにて保存しておけば再利用高そう(メモリ的にどうかとかありそうだけど)
  • BigCharFactory.php は Factory と名前になっているけど実質は Singleton に近い形で実装されている。
  • ただ結局配列とかに入れちゃってるんだよな。ここはもうちょっとスマートになりそうな…。
<?php
    /**
     * 大きな文字取得
     *
     * 一度poolに保存してキーにマッチしたものを返すという
     * キャッシュのような機構になっている。
     *
     * @access public
     * @param void
     * @return object $this->pool[$charname]
     */
    public function getBigChar(string $charname)
    {
        if (!isset($this->pool[$charname])) {
            $this->pool[$charname] = new BigChar($charname);
        }
        return $this->pool[$charname];
    }