Abstract Factory Pattern
TL;DR
TL;DR
TL;DR
Subtypes must be substitutable for their supertypes without breaking client code. Preserve behavioral contracts.
Provide an object as surrogate for null reference with neutral behavior
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