Kompozycja to nic innego jak wykorzystanie obiektu jako pole.
public class Engine{
}
public class Wheels{
}
public class Gearbox{
}
public class Car{
private Engine engine;
private Wheels wheels;
private Gearbox gearbox;
Car(Engine engine, Wheels wheels, Gearbox gearbox){
this.engine = engine;
this.wheels = wheels;
this.gearbox = gearbox;
}
}
By stworzyć samochód potrzebujesz najpierw utworzyć pozostałe elementy takie jak: silnik, koła i skrzynie biegów. W mainie po prostu je inicjujesz przez słowo kluczowe "new". Gdy stworzysz te trzy obiekty, zabierasz się za stworzenie obiektu Car. Wtedy konstruktor mówi: hej! potrzebuje silnika i kół! A i bym zapomniał o skrzyni biegów! Zatem podajesz mu te obiekty w konstruktorze i to tyle :) Na tym polega kompozycja + dependency injection (czyli wstrzykiwanie obiektów)