} } class ArrabiataFactory extends PastaFactory { public function noodle() { return new Penne(); } public function sauce() { return new TomatoSauce(); } public function topping() { return new Eggplant(); } } class Kitchen { public function cook(PastaFactory $pasta_factory) { var_dump($pasta_factory->noodle()); var_dump($pasta_factory->sauce()); var_dump($pasta_factory->topping()); } } $kitchen = new Kitchen(); $carbonara_factory = new CarbonaraFactory(); $kitchen->cook($carbonara_factory); $arrabiata_factory = new ArrabiataFactory(); $kitchen->cook($arrabiata_factory);