food_spawner class can not be aware of what type of food it spawns. It's job is to spawn food to an available location and send notification if it depleted.
[x] Create an abstract food_factory class with a create method.
Implement the abstract factory
[x] normal_food_factory class
[x] magic_food_factory class
[x] Use constructor injection to make available the abstract factory to the food_spawner class.
[x] magic_food::eat method should search the special_ability_slot on the snake instead of itself.
food_spawner class can not be aware of what type of food it spawns. It's job is to spawn food to an available location and send notification if it depleted.