Design Principles

Program to an interface not an implementation

Favor object composition over class inheritance