Combining Refactoring Techniques
Imagine a business came to you and gave you some requirements for a new feature. This will require the ability to be able to create many different kinds of planes while being able to define all their possible parameters, such as the number of seats, whether there is a bathroom, and so on.
In the previous section, we created a factory function. Given these new requirements, our function might look like this now:
const createPlane = ( type: PlaneType, engine: IPlaneEngine, hasFirstClass: boolean, hasBathroom: boolean, numberOfSeats: number ): Airplane => { const plane = new Airplane(); plane.type = type; plane.engine = engine; plane.hasFirstClass = hasFirstClass; plane.hasBathroom = hasBathroom; plane.numberOfSeats = numberOfSeats; return plane; }
When used, it might look like this:
const plane = createPlane( PlaneType.Passenger, new PassengerPlaneEngine...