嗨,我想构建一个流畅的界面来创建某种工厂或构建器的对象。
我知道我必须“返回这个”才能使方法可链接。
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() 一样的流利的 api,它会是什么或者什么是一个好的实现......
有没有可能有这样的东西
Car c = builder.AddFrame(fBuilder).AddWheels(wBuilder).AddEngine(x=>x.WithCylinders(12).WithPistons()).BuildCar();
那么总而言之,如何构造 fluent interface 的流程以及如何嵌套 fluent Interfaces 呢?