以下のサンプルは単純ファクトリーパターンの実装例です。
ファクトリークラスは`createDrink`メソッドにより`Drink`インターフェイスを実装したクラスを作成します。
選択的に異なる飲料を簡単に生成できるようになってます。
また、ファクトリーパターンはストラテジーパターンと非常に相性が良いです。
組み合わせて使用することでコードの保守性と拡張性が向上します。
<?php
/**
* 飲料インターフェイス
*/
interface Drink
{
public function getName(): string;
}
<?php
/**
* 飲料タイプ
*/
enum DrinkType
{
case COLA;
case ORANGE_JUICE;
}
<?php
/**
* コーラクラス
*/
class Cola implements Drink
{
public function getName(): string
{
return 'コーラ';
}
}
<?php
/**
* オレンジジュースクラス
*/
class OrangeJuice implements Drink
{
public function getName(): string
{
return 'オレンジジュース';
}
}
<?php
/**
* 飲料ファクトリー
*/
class DrinkFactory
{
public static function createDrink(DrinkType $drinkType): Drink
{
return match ($drinkType) {
DrinkType::COLA => new Cola(),
DrinkType::ORANGE_JUICE => new OrangeJuice(),
};
}
}
<?php
$cola = DrinkFactory::createDrink(DrinkType::COLA);
echo $cola->getName(); // 出力: コーラ
$orangeJuice = DrinkFactory::createDrink(DrinkType::ORANGE_JUICE);
echo $orangeJuice->getName(); // 出力: オレンジジュース