Favor terjadi ketika kedua kandidat lolos. Masalah yang dinyatakan dalam pertanyaan gagal pada akun ini, karena hanya memiliki opsi komposisi.
"Komposisi bisa menggunakan generalisasi juga". Apakah pernyataan ini masuk akal bagi kami? Jika tidak maka kita belum siap untuk memahami aturan 'nikmat'.
Mengapa kami lebih menyukai Komposisi adalah bahwa Komposisi menawarkan kemungkinan ekstensi / fleksibilitas lebih daripada generalisasi. Ekstensi / fleksibilitas ini sebagian besar merujuk pada runtime / fleksibilitas dinamis (yang dicapai dengan kombinasi antarmuka dan komposisi).
Manfaatnya tidak segera terlihat. Untuk melihat manfaatnya, Anda harus menunggu permintaan perubahan tak terduga berikutnya. Jadi dalam kebanyakan kasus, mereka yang berpegang pada generalisasi gagal jika dibandingkan dengan mereka yang memeluk komposisi (kecuali satu kasus yang jelas disebutkan kemudian). Karena itu aturannya. Dari sudut pandang pembelajaran jika Anda dapat mengimplementasikan injeksi ketergantungan dengan sukses maka Anda harus tahu mana yang disukai dan kapan. Aturan membantu Anda dalam membuat keputusan saat Anda tidak yakin mana yang harus dipilih. Sekali lagi Anda harus dapat melihat kedua opsi di tempat pertama untuk mendukung satu.
Ringkasan: Komposisi: Kopling dikurangi dengan hanya memiliki beberapa hal kecil yang Anda tancapkan ke sesuatu yang lebih besar, dan objek yang lebih besar hanya memanggil objek yang lebih kecil kembali. Generalisasi: Dari sudut pandang API pihak ke-3, mendefinisikan bahwa suatu metode dapat diganti adalah komitmen yang lebih kuat daripada mendefinisikan bahwa suatu metode dapat disebut (yakin menang untuk Generalisasi). Dan jangan pernah lupa bahwa dengan komposisi Anda menggunakan generalisasi juga, dari antarmuka bukan kelas besar. Namun sayangnya seluruh kredit masuk ke komposisi.