Почитайте про инъекцию зависимостей.
Интерфейс дает возможность использовать все реализующие его классы без изменения кода класса, где используются подклассы этого интерфейса (звучит криво, но вчитайтесь :) )
А суть паттернов в двух словах - свести к минимуму кол-во изменений существующего кода при добавлении новой функциональности.
Еще про SOLID принципы почитайте, тоже будет полезно.