public static void Main()
var director = new FinalResultDirector(new ComplexTypeBuilder());
var result = director.Build(new Dependency(), new OtherDependency());
Console.WriteLine(result);
public class ComplexType1 {}
public class ComplexType2 {}
public class ComplexType3 {}
public class ComplexType4 {}
public class Dependency {}
public class OtherDependency{}
public ComplexType1 ComplexType1 {get; internal set;}
public ComplexType2 ComplexType2 {get; internal set;}
public ComplexType3 ComplexType3 {get; internal set;}
public ComplexType4 ComplexType4 {get; internal set;}
public class ComplexTypeBuilder
public ComplexType1 Build1(Dependency dep, OtherDependency otherDep)
return new ComplexType1();
public ComplexType2 Build2(Dependency dep, OtherDependency otherDep)
return new ComplexType2();
public ComplexType3 Build3(Dependency dep, OtherDependency otherDep)
return new ComplexType3();
public ComplexType4 Build4(Dependency dep, OtherDependency otherDep)
return new ComplexType4();
public class FinalResultDirector
private readonly ComplexTypeBuilder _builder;
public FinalResultDirector(ComplexTypeBuilder builder)
public FinalResult Build(Dependency dep, OtherDependency otherDep)
ComplexType1 = _builder.Build1(dep, otherDep),
ComplexType2 = _builder.Build2(dep, otherDep),
ComplexType3 = _builder.Build3(dep, otherDep),
ComplexType4 = _builder.Build4(dep, otherDep)