Dependency Inversion Design Pattern