抽象工厂糟糕的设计?

时间:2012-11-29 06:54:51

标签: abstract-factory

我有建造不同尺寸汽车的汽车工厂。 我有两家工厂:美国和泰国,生产大小,中等和小型车。 但我有一个问题:泰国工厂不生产大型汽车。

代码:

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 { }

我该怎么办? 我的抽象工厂设计不合理吗?

2 个答案:

答案 0 :(得分:0)

@zzfima,从COM中获取这个想法,如果支持创建指定大小的汽车并适当调用,如何查询界面并找出它?代码肯定会实现抽象工厂模式。

答案 1 :(得分: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 { }