LoginSignup
0
0

デザインパターン 〜ファクトリパターン〜

Posted at

ファクトリパターン

オブジェクトの生成をカプセル化して、
サブクラスがインスタンスを生成するためのインターフェースを提供する。

例)
自動車工場で異なるモデルの車を作って、顧客の注文に応じて最適な車を組み立てる。
以下のメリットがある。

  • 柔軟性:顧客の要求に応じて、異なるモデルの車を生成できる
  • コードの整理:オブジェクト生成ロジックを一箇所にまとめることで、コードのメンテナンスが容易になる
// 共通動作である運転をインターフェースとして、各車種のタイプでクラスを定義。(= ポリモーフィズム)
interface Car {
    public function drive();
}

class Sedan implements Car {
    public function drive() {
        echo 'セダンを運転します';
    }
}

class SUV implements Car {
    public function drive() {
        echo 'SUVを運転します';
    }
}

// 決して自動車工場の工場にかけて命名しているのではなく、factoryクラスだということを表しています…
class CarFactory {
    public static function createCar($type) {
        if($type === 'sedan') {
            return new Sedan();
        } else if($type === 'suv') {
            return new SUV();
        }
        return null;
    }
}

// 顧客の注文に応じて車を生成
$car1 = carFactory::createCar('sedan');
$car2 = carFactory::createCar('suv');

// 生成した車を走らせてみる
$cars = [$car1, $car2];
foreach($cars as $car) {
    echo "試運転を開始します。{$car->drive()}";
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0