An implementation of the builder pattern