目的
「リファクタリング」を理解するためにサンプルコードを PHP で書き換えてみました。
今回は「フィールドによるサブクラスの置き換え」について書きます。
「フィールドによるサブクラスの置き換え」 について
定数データを返すメソッドだけが異なるサブクラスがある。
例
変更前
<?php
abstract class Person
{
abstract function isMale();
abstract function getCode();
}
class Male extends Person
{
public function isMale()
{
return true;
}
public function getCode()
{
return 'M';
}
}
class Female extends Person
{
public function isMale()
{
return false;
}
public function getCode()
{
return 'F';
}
}
変更後
<?php
class Person2
{
private $_isMale;
private $_code;
protected function __construct($isMale, $code)
{
$this->_isMale = $isMale;
$this->_code = $code;
}
public static function createMale()
{
return new self(true, 'M');
}
public static function createFemale()
{
return new self(false, 'F');
}
public function isMale()
{
return $this->_isMale;
}
public function getCode()
{
return $this->_code;
}
}
$kent = Person2::createMale();
echo (int)$kent->isMale() . "\n";
echo $kent->getCode() . "\n";
$ann = Person2::createFemale();
echo (int)$ann->isMale() . "\n";
echo $ann->getCode() . "\n";