Nota: questo è stato completamente riscritto dal mio precedente esempio
Pensa alle prese di corrente. In ogni nazione, la politica di alto livello è che le prese di corrente sono sempre le stesse. Non importa da dove arrivi l'elettricità (carbone, gas, nucleare), le prese sul muro dovrebbero sempre fornire la stessa quantità di energia, attraverso lo stesso set di connettori.
Ora puoi collegare qualsiasi dispositivo a quella presa, perché hanno tutti un'interfaccia comune, la "spina". La politica di alto livello non deve mai dettare alcuna parte di tali dettagli di implementazione. Basta collegare qualcosa e va.
Ora, se hai un dispositivo che non vuole l'alimentazione CA - forse funziona su un circuito a 7V DC - puoi ancora usare quella politica di alto livello, hai solo bisogno di una sorta di adattatore tra l'alimentatore e il dispositivo. Inoltre, poiché tutti hanno lo stesso criterio di alto livello, il produttore può crearlo nell'implementazione, senza modificare la politica di alto livello. La persona che collega l'implementazione alla politica (tu, inserendo il tuo laptop in) non ha davvero bisogno di capirlo.
Inoltre, se il produttore vuole vendere lo stesso dispositivo in un altro paese, tutto ciò che devono fare è sviluppare un adattatore diverso. Pertanto, la stessa implementazione può funzionare con più policy, mentre la stessa policy può eseguire più implementazioni.
Questo è un perfetto esempio di inversione di dipendenza.
Ma ecco la parte interessante: torna a ciò che ho detto prima. "Non importa da dove tieni l'elettricità." Questo è anche un dettaglio di implementazione. Il criterio di alto livello è che tutte le prese di corrente hanno la stessa forma ed emettono lo stesso tipo di alimentazione. I dettagli di implementazione di basso livello sono entrambi da dove proviene l'elettricità e che cosa esegue.
In termini di programmazione, ciò significa che la politica di alto livello è l'interfaccia (dove una lingua lo supporta.Un'altra forma di DI è la digitazione anatra) che un'API fornisce e l'applicazione consuma e i dettagli di implementazione di basso livello sono entrambe le applicazioni che lo consumano e l'API stessa, nessuna delle quali deve capirsi l'un l'altra.
Gli adattatori possono essere utilizzati per adattare la stessa implementazione a politiche diverse.