2012-11-29 142 views
1

我有生產不同尺寸汽車的汽車廠。 我有2個工廠:美國和泰國,使汽車大小,大,中,小。 但我有一個問題:泰國工廠不製造大車。抽象工廠壞設計?

代碼:

public enum CarSize { Big, Middle, Little,} 

public interface ICarFactory { 
    ICar CreateCar(CarSize carSize); 
} 

public class USACarFactory : ICarFactory { 
    public ICar CreateCar(CarSize carSize) { 
     ICar car = null; 
     switch (carSize) { 
      case CarSize.Little: 
       car = new USALittleCar(); 
       break; 
      case CarSize.Middle: 
       car = new USAMiddleCar(); 
       break; 
      case CarSize.Big: 
       car = new USABigCar(); 
       break; 
     } 
     return car; 
    } 
} 

public class ThailandCarFactory : ICarFactory { 
    public ICar CreateCar(CarSize carSize){ 
     ICar car = null; 
     switch (carSize) { 
      case CarSize.Little: 
       car = new ThailandLittleCar(); 
       break; 
      case CarSize.Middle: 
       car = new ThailandMiddleCar(); 
       break; 
      case CarSize.Big: 
       //no big cars in Thailand!!!! 
       break; 
     } 
     return car; 
    } 
} 

public interface ICar { } 

public class USABigCar : ICar { } 
public class USAMiddleCar : ICar { } 
public class USALittleCar : ICar { } 

public class ThailandMiddleCar : ICar { } 
public class ThailandLittleCar : ICar { } 

我該怎麼辦? 我的抽象工廠設計得不好嗎?

+0

爲什麼你這樣做'案例CarSize.Big:泰國沒有大型汽車!!!!打破;'?你說過:但是,我有一個問題:在泰國工廠沒有生產大型汽車!!!但是你不允許泰國的工廠生產大型汽車?我不明白你的意思。請澄清。 – hologram

+0

我的意思是,如果我要求泰國工廠做大車,我會得到空。我使用了更好的可見性的評論。 – zzfima

+0

這是因爲你寫的代碼,所以泰國工廠不製造大車... – hologram

回答

0

@zzfima,從COM中汲取理念,如何查詢接口並找出它是否支持創建指定大小的汽車並適當調用?代碼完全實現了抽象工廠模式。

+0

謝謝 但是(在我的實現中)它返回null,等於「不支持創建指定大小的汽車」。也許我錯了,但來自COM的想法擴大了代碼量,但泰國繼續只做小中型汽車。再一次,也許我錯了。 謝謝Karthik – zzfima

+0

@zzfima。如何用像GetAvailableSize()這樣的方法來擴展工廠接口,該方法返回一個列表。然後在工廠實例中,檢查是否有特定的大小,如if(實例.GetAvailableSize()。有(CarSize.BigCar)){instance.CreateCar(CarSize.BigCar);} – Karthik

0
case CarSize.Big: 
      car = new ThailandBigCar(); 
      break; 

試試看。這應該可以讓你製造大車。

public interface ICar { } 

public class USABigCar : ICar { } 
public class USAMiddleCar : ICar { } 
public class USALittleCar : ICar { } 

public class ThailandMiddleCar : ICar { } 
public class ThailandLittleCar : ICar { } 
public class ThailandBigCar : ICar { } 
+0

光明,在泰國沒有大型汽車。你不能只添加它 – zzfima

+0

你想製造大型汽車嗎?你似乎反駁自己是否想要製造大型汽車。請告訴我,是的,我想製造大型汽車,否則我不想製造大型汽車。非常感謝! – hologram

+0

我不能在泰國製造大型汽車。一旦我能做到這一點,但今天意大利的超級巨型太空部隊已經將工廠摧毀了。所以,設計改變了,我無法做到。如果我能做到這一點,我不會問這個問題。問題是:如果設計更改,該怎麼辦?我試圖找到答案 – zzfima