Я считаю, что чем больше вы начинаете разрабатывать с использованием шаблонов проектирования, тем чаще и чаще вы будете находить, где композиция будет предпочтительнее наследования. Я действительно верю в книгу Head First: Design Patterns , что " композиция Favor Over Inheritance " является одним из основных принципов проектирования.
Ваш пример возможности макетировать части композиции для тестирования, возможно, является одним из лучших возможных примеров.
Редактировать : Хотя основной принцип в шаблонах проектирования - отдавать предпочтение композиции, а не наследованию, это не означает, что не существует шаблонов проектирования, которые используют наследование там, где это необходимо. Другим базовым примером является шаблон декоратора, где вы кодируете в направлении абстрактного суперкласса (хотя это для сопоставления типов, а не для реализации отношения «есть»).