(Creational) adding functionality while separating differences into abstract classes.