【S4】問6解答例

 このリファクタリング例では、与えられたコードを抽象クラスFoodとクラスFruitVegetableに分割し、共通の振る舞いを持つ抽象メソッドを実装しました。
それにより、コードがメンテナンスしやすくなり、読みやすさも向上しました。

<?php

/**
 * 抽象クラス Food を定義
 */
abstract class Food
{
    protected string $name;

    public function __construct(string $name)
    {
        $this->name = $name;
    }

    abstract public function prepare(): void;

    abstract public function cook(): void;
}
                    
<?php

/**
 * クラスFruitを定義
 */
class Fruit extends Food
{
    public function prepare(): void
    {
        echo "フルーツ:{$this->name}を洗いました" . PHP_EOL;
    }

    public function cook(): void
    {
        echo "フルーツ:{$this->name}を切りました" . PHP_EOL;
    }
}
                    
<?php
/**
 * クラスVegetableを定義
 */
class Vegetable extends Food
{
    public function prepare(): void
    {
        echo "野菜:{$this->name}を切りました" . PHP_EOL;
    }

    public function cook(): void
    {
        echo "野菜:{$this->name}を煮ました" . PHP_EOL;
    }
}
                    
<?php

$apple = new Fruit("りんご");
$apple->prepare();
$apple->cook();

$carrot = new Vegetable("にんじん");
$carrot->prepare();
$carrot->cook();