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

私は何をすべきか?私のAbstractFactoryは不十分に設計されていますか?

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 に答える