Ja, da ist für TAuto auch richtig, da es im Auto auch nur einen Motor gibt.
Singelton bezieht sich aber (sicherlich) auf das globale Projekt. Du würdest also in jedes Auto exakt den selben einen Motor einbauen - was natürlich physisch nicht möglich ist. Man muss also jeweils eine Motorinstanz erzeugen und dessen Interface dann weiter verwenden. Die Frage ist dann für mich, wer Owner des erzeugten Objektes (dessen verwendete Schnittstelle verwendet wird) ist.
Ja, dann funktioniert es für die Liste aber nicht mehr innerhalb von TAuto.
Im Auto gibt es auch nur einen Platz für einen Motor. Dem kannst Du dann einen IMotor oder einen ITestMotor zuweisen (oder ggf. auch erst mal keinen).
Klar. Das geht. Nur warum ist
if fuhrpark.eingeteiltesfahrzeug.motor.kraftoffart = diesel then einkaufsabteilung.dieselbestellen;
schlechter Stil?
Das hat aber nichts mit Interfaces und Spring zu tun. Man kann technisch auf Fahrzeug.Motor.Kraftstoffart zugreifen, egal ob Motor vorliegend ein Objekt oder Interface ist.
Wichtig ist hier natürlich, dass bei jedem Zugriff auf Motor.Kraftstoffart ein Motor zugewiesen ist. Ist das nicht gesichert, muss man den Zugriff natürlich in einer Eigenschaft oder Funktion kapseln.
Aber wie der Motor erstellt und und in das Fahrzeug eingebaut wird, ist dabei völlig egal.
Einziger Aspekt: Wenn Motor eine Klasseninstanz ist, kennt das Auto alle öffentlichen Eigenschaften und Methoden des Autos (also Schraubenanzahl, Kraftstoffart sowie die Methode Brumm). Handelt es sich um eine Schnittstelle, dann kennt das Auto nur die dort veröffentlichten Eigenschaften (also z.B. nur die Kraftstoffart). Dann könnte man irgendwann auch mal etwas anders als einen Motor einbauen, das eine Kraftstoffart benennen kann (z.B. einen Kanister - macht aber wohl nicht viel Sinn
)