私は、さまざまなフルーツのクラスを持っているすべてが同じインターフェイスIFruit
実装しています。私は果物のリストを描きたい場合は、私がやっているどのようにリファクタリングメソッド呼び出しは同じように見える?
public class AppleDrawer
{
public void Draw(IApple apple, Graphics graphics){}
}
public class BananaDrawer
{
public void Draw(IBanana banana, Graphics graphics){}
}
:
public interface IApple : IFruit{ }
public interface IBanana : IFruit{ }
public interface ICarrot: IFruit{ }
をそれらのそれぞれが自分の引き出しを持っています次のようになります。
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...
}
私のコードを読むと、私は非常に汚いと感じます。
私は12の異なる果物を持っているので、複数のif..elseステートメントがあります。私は現在のプロジェクトでこのステートメントを多くしなければなりません。
DrawFruitsメソッドをリファクタリングする方法はありますか?
私は一種の工場パターンを考えていますが、実際にそれをどうやって行うのか分かりません。
果物のクラスでは、引き出しをプロパティとして使用する必要がありますか?あるいは私はDrawer Factoryメソッドを呼び出すことができますか?
これは私の現在のプロジェクトではたくさんあるパターンで、私を満足させる解決策は見つけられません。
「IFruitDrawer」を使用しないのはなぜですか? –