PHP デザインパターン(Factory Methodパターン)


Factory Methodパターン

↓買ったので、JavaをPHPに読み替えて勉強。そのメモ。

鍵を作る工場

f:id:taramonera:20101124172222p:image

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)を修正せずに、別の製品と工場を作れる。

  • このエントリーをはてなブックマークに追加

コメントをどうぞ

メールアドレスが公開されることはありません。