Nota: questo è stato completamente riscritto dal mio esempio precedente
Pensa alle prese di corrente. In ogni nazione, la politica di alto livello è che le prese di corrente siano sempre le stesse. Non importa da dove provenga l'elettricità (carbone, gas, nucleare), le prese sul muro dovrebbero sempre emettere la stessa quantità di energia, attraverso lo stesso set di connettori.
Ora puoi collegare qualsiasi dispositivo a quella presa, perché tutti hanno 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 funziona.
Ora se hai un dispositivo che non desidera l'alimentazione CA - forse funziona su un circuito a 7 V CC - puoi comunque utilizzare questa politica di alto livello, hai solo bisogno di un qualche tipo di adattatore tra l'alimentatore e il dispositivo. E poiché tutti hanno la stessa politica di alto livello, il produttore può integrarla nell'implementazione, senza alcuna modifica della politica di alto livello. La persona che collega l'implementazione alla politica (tu, collegando il tuo laptop) non ha davvero bisogno di capire neanche.
Inoltre, se il produttore desidera vendere lo stesso dispositivo in un altro paese, è sufficiente sviluppare un adattatore diverso. Quindi la stessa implementazione può funzionare con più policy mentre la stessa policy può eseguire più implementazioni.
Questo è un esempio perfetto di inversione di dipendenza.
Ma ecco la parte interessante: torna a quello che ho detto per la prima volta. "Non importa da dove prendi l'elettricità." Anche questo è un dettaglio di implementazione. La politica di alto livello è che tutte le prese di corrente hanno la stessa forma ed emettono lo stesso tipo di alimentazione. I dettagli dell'implementazione di basso livello sono sia la provenienza dell'elettricità sia il suo funzionamento.
In termini di programmazione, ciò significa che la politica di alto livello è l'interfaccia (dove una lingua la supporta. Un'altra forma di DI è la digitazione anatra.) Che fornisce un'API e l'applicazione consuma, ei dettagli dell'implementazione di basso livello sono entrambi applicazione che lo consuma e l'API stessa, nessuna delle quali deve capirsi.
Gli adattatori possono essere utilizzati per adattare la stessa implementazione a politiche diverse.