Catatan: ini telah sepenuhnya ditulis ulang dari contoh saya sebelumnya
Pikirkan tentang soket daya. Di negara mana pun, kebijakan tingkat tinggi adalah bahwa soket daya selalu sama. Tidak masalah dari mana Anda mendapatkan listrik (batubara, gas, nuklir), soket di dinding harus selalu mengeluarkan jumlah daya yang sama, melalui set konektor yang sama.
Sekarang Anda dapat menyambungkan perangkat apa pun ke soket itu, karena semuanya memiliki antarmuka umum, "colokan". Kebijakan tingkat tinggi tidak pernah harus mendikte bagian mana pun dari detail implementasi itu. Cukup tancapkan sesuatu dan itu berjalan.
Sekarang jika Anda memiliki perangkat yang tidak menginginkan daya AC - mungkin beroperasi pada sirkuit DC 7V - Anda masih dapat menggunakan kebijakan tingkat tinggi itu, Anda hanya perlu semacam adaptor antara catu daya dan perangkat. Dan, karena setiap orang memiliki kebijakan tingkat tinggi yang sama, pabrikan dapat memasukkannya ke dalam implementasi, tanpa mengubah kebijakan tingkat tinggi. Orang yang menghubungkan implementasi ke kebijakan (Anda, memasukkan laptop Anda) tidak benar-benar perlu memahami juga.
Lebih jauh, jika pabrikan ingin menjual perangkat yang sama di negara lain, yang harus mereka lakukan adalah mengembangkan adaptor yang berbeda. Jadi implementasi yang sama dapat bekerja dengan beberapa kebijakan, sementara kebijakan yang sama dapat menjalankan beberapa implementasi.
Ini adalah contoh sempurna dari inversi ketergantungan.
Tapi inilah bagian yang menarik: Kembalilah ke apa yang pertama kali saya katakan. "Tidak masalah dari mana kamu mendapatkan listrik." Ini juga merupakan detail implementasi. Kebijakan tingkat tinggi adalah bahwa semua soket daya memiliki bentuk yang sama dan memancarkan jenis daya yang sama. Detail implementasi tingkat rendah adalah dari mana listrik berasal dan dari mana ia beroperasi.
Dalam istilah pemrograman, itu berarti kebijakan tingkat tinggi adalah antarmuka (Di mana bahasa mendukungnya. Bentuk lain dari DI adalah mengetik-bebek.) Yang disediakan oleh API dan dikonsumsi oleh aplikasi, dan detail implementasi tingkat rendah keduanya adalah aplikasi memakannya dan API itu sendiri, yang keduanya tidak perlu saling memahami.
Adaptor dapat digunakan untuk menyesuaikan implementasi yang sama ke dalam kebijakan yang berbeda.