FactoryMethod によるコンストラクタの置き換え (リファクタリング-p304)
リファクタリング
Published: 2019-03-10

目的

「リファクタリング」を理解するためにサンプルコードを 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";