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

我应该怎么办?我的抽象工厂设计得很糟糕吗?

4

2 回答 2

0

@zzfima,借鉴COM的思路,查询接口看看是否支持创建指定大小的汽车并适当调用?代码肯定实现了抽象工厂模式。

于 2012-11-29T08:30:24.330 回答
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 { }
于 2012-12-02T19:33:24.773 回答