2017-07-20
Abstract Factory パターン
デザインパターンちゃんと勉強をしようと思ったので結城さんの本を 1 つ 1 つ実装してみる。 前回の Builderからの続き。
関連するインスタンス群を生成するための API を集約することによって、複数のモジュール群の再利用を効率化することを目的とする。日本語では「抽象的な工場」と翻訳される事が多い。
かなり大掛かりになっているので namespace で分ける形にしている。元々の java の実装では package が使われているが、PHP では同様の仕組みがないので namespace で代用してる。
クラス図
自分としての理解・疑問
- 大掛かりではあるが、写経しているとそれほど複雑性は感じない。
- 抽象的な部分と具体的な部分を明確に分け実装すると「次の工場」の実装がかなり楽になりそう。
- 具体的な部分を切り出す(工場化)する事でテストもしやすいと感じる。
抽象的なグループである factory(namespace)から工場のインスタンスが作られる所をポイントだと感じるので、共通している処理を見通せるようなものなら役にたちそう。
<?php
/**
* 工場作成
*
* @access public
* @static
* @param string $classname 工場名(クラス名)
* @return object $this->factory
*/
public static function getFactory($classname)
{
$factory = null;
try {
$factory = new $classname;
} catch (Exception $e) {
echo "捕捉した例外:" . $e->getMessage() . "\n";
}
return $factory;
}