Благосклонность случается, когда оба кандидата готовятся. Задача, указанная в вопросе, не может быть использована для этой учетной записи, поскольку она имеет только параметр композиции.
«Композиция также может использовать обобщение». Имеет ли это утверждение смысл для нас? Если нет, то мы еще не готовы понять правило «благосклонности».
Почему мы предпочитаем Composition, так это то, что Composition предлагает больше возможностей расширения / гибкости, чем обобщение. Это расширение / гибкость относится, главным образом, к динамической гибкости во время выполнения (которая достигается с помощью комбинации интерфейсов и композиции).
Благо не сразу видно. Чтобы увидеть выгоду, вам нужно дождаться следующего неожиданного запроса на изменение. Таким образом, в большинстве случаев те, кто придерживается обобщения, терпят неудачу по сравнению с теми, кто принял композицию (за исключением одного очевидного случая, упомянутого позже). Отсюда и правило. С точки зрения обучения, если вы можете успешно внедрить внедрение зависимостей, вы должны знать, какой из них предпочтительнее и когда. Правило помогает вам принять решение, когда вы не уверены, какой из них выбрать. Опять же, вы должны быть в состоянии увидеть оба варианта в первую очередь в пользу одного.
Описание: Состав: связь уменьшается благодаря наличию нескольких более мелких вещей, которые вы подключаете к чему-то большему, а более крупный объект просто вызывает меньший объект обратно. Обобщение: с точки зрения стороннего API, определение того, что метод может быть переопределен, является более строгим обязательством, чем определение того, что метод может быть вызван (уверен, победа для Обобщения) И никогда не забывайте, что с композицией вы также используете обобщение из интерфейса вместо большого класса. Но, к сожалению, вся заслуга в композиции.