2012-11-29 145 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