Builder

Step Builder: el compilador obliga a respetar el orden de construcción.

#Cuándo usarla

Cuando hay pasos obligatorios y orden que el cliente no puede romper.

public interface INeedHost { INeedPort WithHost(string host); }
public interface INeedPort { ICanBuild WithPort(int port); }
public interface ICanBuild { Connection Build(); }

public class ConnectionBuilder : INeedHost, INeedPort, ICanBuild
{
    private string _host = ""; private int _port;

    public static INeedHost Create() => new ConnectionBuilder();
    public INeedPort WithHost(string host) { _host = host; return this; }
    public ICanBuild WithPort(int port)    { _port = port; return this; }
    public Connection Build() => new(_host, _port);
}

// Uso obligado:
var c = ConnectionBuilder.Create().WithHost("db").WithPort(5432).Build();
Tradeoffs
Pro Contra
Imposible construir mal el objeto Muchas interfaces — más código

#creational #fluent #type-safe