Я нашел ответ, который заставил меня немного больше понять композицию классов.
class Engine
{
}
class Automobile
{
}
class Car extends Automobile // car "is a" automobile //inheritance here
{
Engine engine; // car "has a" engine //composition here
}
но разве это не фасадный узор? Разве фасад не предназначен для упрощения класса путем разделения на подклассы? В чем же тогда разница между композицией и фасадом?
Или, может быть, я ошибаюсь. Фасад - это образец дизайна, но композиция больше похожа на хорошую практику. Можно ли сказать, что использование фасада - это создание композиции?


Композиция объединяет N других объектов в объект с тем же API. Таким образом, вы можете вызывать один и тот же метод как для составного объекта, так и для его компонентов.
Кажется, что Фасад делает что-то очень похожее, но я думаю, что он снимает ограничение, когда составной объект должен соответствовать одному и тому же API. Вся суть фасада в том, что API-интерфейсы оболочки и оболочки могут быть разными.
Пример, который вы показываете, не является ни формальным Composite, ни Facade, но если вы возьмете самое открытое определение Composite, то это может быть одно: «объект, который имеет другие объекты в качестве членов, с которыми он выполняет операции».
Шаблон фасада - это шаблон проектирования, используемый для изменения интерфейса, не подходящего для ваших текущих потребностей, на более полезный. Он полностью инкапсулирует другой интерфейс, не раскрывая его.
Некоторые примеры использования:
Я в порядке с тобой