A constructor like new Pizza("L", true, false, true, null, 2) is impossible to read and easy to call wrong. Builder lets you set fields one named step at a time and then calls build() to check the combination and return an immutable object. Use it when an object has several optional fields or needs validation before it exists. For picking which class to create in one call, a factory fits better.