0

こんにちは、ある種のファクトリまたはビルダーのオブジェクトを作成するための流暢なインターフェイスを構築したいと思います。

メソッドを連鎖可能にするために「これを返す」必要があることを理解しています。

public class CarBuilder
{

   public  CarBuilder()
   {
       car = new Car();
   }
    private Car car;

    public CarBuilder AddEngine(IEngineBuilder engine)
    {
        car.Engine = engine.Engine();
        return this;
    }

    public CarBuilder AddWheels(IWheelsBuilder wheels)
    {
        car.Wheels = wheels.Wheels();
        return this;
    }
    public CarBuilder AddFrame(IFrameBuilder frame)
    {
        car.Frame = frame.Frame();
        return this;
    }

    public Car BuildCar()
    {
        return car;
    }

}

これで私はそのような車を作ることができました:

 Car c = builder.AddFrame(fBuilder).AddWheels(wBuilder).AddEngine(eBuilder).BuildCar();

しかし、私が必要としているのは、特別なシーケンスまたはワークフローです。車輪はフレームの上にしか構築できず、車輪が存在するときにエンジンを構築することができます。したがって、自動車ビルダーのすべての方法を提供する代わりに、フレームのみをビルダーに追加し、ホイールのみをフレームに追加し、その上にエンジンを追加できるようにしたいと考えています...

また、EngineBuilder 自体に eBuilder.Cylinders(12).WithPistons()....

こんなものがあってもいいのだろうか

Car c = builder.AddFrame(fBuilder).AddWheels(wBuilder).AddEngine(x=>x.WithCylinders(12).WithPistons()).BuildCar();

要するに、流暢なインターフェイスの流れを構築する方法と、流暢なインターフェイスをネストする方法は?

4

2 に答える 2

0

その場合、AddWheels は Frame に属するメソッドではないでしょうか? フレームなしでホイールを追加するなど、無効な操作が要求されたときに例外をスローすることも検討できます。

于 2011-02-24T15:22:55.100 に答える