У меня есть другой класс фрукты, все реализует тот же интерфейс IFruit
:Как переработать методы вызова, которые выглядят одинаково?
public interface IApple : IFruit{ }
public interface IBanana : IFruit{ }
public interface ICarrot: IFruit{ }
Каждый из них имеет свой собственный ящик:
public class AppleDrawer
{
public void Draw(IApple apple, Graphics graphics){}
}
public class BananaDrawer
{
public void Draw(IBanana banana, Graphics graphics){}
}
Если я хочу нарисовать список фруктов, я делаю следующие
public void DrawFruits(List<IFruit> fruits, Graphics graphics)
{
foreach(var fruit in fruits)
{
if(fruit is IBanana)
{
var banana = (IBanana)fruit;
var drawer = new BananaDrawer();
drawer.Draw(banana, graphics);
}
else if(fruit is IApple)
{
var apple = (IApple)fruit;
var drawer = new AppleDrawer();
drawer.Draw(banana, graphics);
}
etc...
}
Я чувствую себя очень грязным, когда читаю свой код.
Моя проблема заключается в множественном утверждении if..else, потому что у меня есть 12 разных плодов, и я должен сделать это заявление много в моем текущем проекте.
Есть ли способ рефакторинга моего метода DrawFruits?
Я думаю о какой-то фабричной схеме, но я действительно не вижу, как это сделать.
Является ли мой класс фруктов брать ящик как собственность? Или, может быть, я могу назвать метод Drawer Factory?
Это образец, который я нахожу в моем текущем проекте, и я не нахожу решение, которое меня удовлетворяет.
Почему бы просто не использовать 'IFruitDrawer'? –