我有不同的果類,都實現了相同的接口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'? – 2011-12-28 15:46:25