Factory Method Pattern
TL;DR
TL;DR
Subtypes must be substitutable for their supertypes without breaking client code. Preserve behavioral contracts.
Software entities should be open for extension, closed for modification. Design for change without breaking existing code.
Handle object type variations through polymorphic types rather than conditional logic
Define the skeleton of an algorithm, deferring specific steps to subclasses