Builder pattern; (creational) added functionality while separating differences into abstract classes.