目的
「リファクタリング」を理解するためにサンプルコードを PHP で書き換えてみました。
今回は「FactoryMethod によるコンストラクタの置き換え」について書きます。
「FactoryMethod によるコンストラクタの置き換え」 について
オブジェクトを生成する際に、単純な生成以上のことをしたい。
例
変更前
<?php
class Employee
{
const ENGINEER = 0;
const SALESMAN = 1;
const MANAGER = 2;
private $_type;
public function __construct($type)
{
$this->_type = $type;
}
public function getType()
{
return $this->_type;
}
}
$e1 = new Employee(1);
echo $e1->getType() . "\n";
変更後
<?php
class Employee2
{
const ENGINEER = 0;
const SALESMAN = 1;
const MANAGER = 2;
public static function create($type)
{
switch ($type) {
case self::ENGINEER:
return new Engineer();
case self::SALESMAN:
return new Salesman();
case self::MANAGER:
return new Manager();
}
throw new Exception('不正なタイプコード');
}
}
class Salesman extends Employee2
{
public function __consturct() {}
}
$e2 = Employee2::create(1);
echo get_class($e2) . "\n";