PHP デザインパターン(Factory Methodパターン)
Factory Methodパターン
↓買ったので、JavaをPHPに読み替えて勉強。そのメモ。
鍵を作る工場
ProductとFactoryはフレームワーク。
KeyとKeyFactoryはフレームワークに肉付けしたもの。
<?php abstract class Product{ public abstract function makeUse(); } abstract class Factory{ final function create($owner){ $product = $this->createProduct($owner); $this->registerProduct($product); return $product; } //継承したクラスに、createProductでnewによるインスタンス生成を任せるのがポイント protected abstract function createProduct($owner); protected abstract function registerProduct($product); } class Key extends Product{ private $owner; function __construct($owner){ $this->owner = $owner; } public function makeUse(){ echo $this->owner."の鍵を使うよ。"; } public function getOwner(){ return $owner; } } class KeyFactory extends Factory{ private $owners = array(); protected function createProduct($owner){ return new Key($owner); } protected function registerProduct($product){ $owners[] = $product->getOwner(); } public function getOwners(){ return $owners; } } $factory = new KeyFactory(); $key1 = $factory->create("田中さん"); $key2 = $factory->create("村田さん"); $key1->makeUse(); $key2->makeUse(); ?>
Factory Methodパターンを使うとうれしいこと
フレームワーク(ProductとFactory)を修正せずに、別の製品と工場を作れる。