I like this interface though I don't believe this is the actual builder pattern so we may want to use another name.