В дополнение к превосходному ответу Гирта, часто хорошей идеей является инкапсуляция того, что обычно выглядит как класс, со всеми связанными с ним вещами в качестве компонента, когда это не всегда необходимо.
Представьте себеприложение, которое позволяет управлять парком компании.Как правило, это будет сопровождаться поддержкой автомобилей.Тем не менее, вы можете захотеть добавить дополнительные компоненты, чтобы иметь возможность обрабатывать самолеты, корабли или велосипеды.Вы также можете не нуждаться в автомобилях в таких случаях.Каждая из этих вещей станет компонентом, даже если вы можете смоделировать ее просто как подклассы единственного класса, который находится в ядре системы под названием Vehicle.Например, у вас могут быть разные элементы, связанные с этими велосипедами, которые не включены в сам класс.Подумайте, насколько разными будут экраны, модели обслуживания, все, что связано с различными методами, которые могут применяться только на уровне подкласса.
Другим примером компонента в таких системах могут быть драйверы.Это уже не подкласс Транспортного средства, а отдельный класс, взаимодействующий с Транспортным средством.Опять же, в зависимости от ситуации вас могут заинтересовать только автомобили, принадлежащие компании или связанные с водителями, которые назначены на них или даже имеют право их использовать.Таким образом, вы получаете совершенно другой набор зависимостей, экранов, методов и т. Д., Которые связаны не только с самим драйвером, но и с окружением.
В целом, хотя это не ограничивается этим,Компонент - это хороший способ понять, как можно разделить вашу систему на более мелкие части, которые можно отсоединить или присоединить к системе, добавляя или удаляя соответствующую часть ее функций.