Her iki aday da uygun olduğunda iyilik olur. Soruda belirtilen sorun bu hesapta başarısız oluyor, çünkü sadece bir kompozisyon seçeneği var.
"Kompozisyon genellemeyi de kullanabilir". Bu ifade bizim için anlamlı mı? Değilse, henüz 'iyilik' kuralını kavramaya hazır değiliz.
Kompozisyonu neden tercih ediyoruz, Kompozisyonun genellemeden daha fazla uzama / esneklik olanakları sunmasıdır. Bu uzatma / esneklik, çoğunlukla çalışma zamanı / dinamik esneklik (arayüzler ve kompozisyon kombinasyonu ile elde edilir) anlamına gelir.
Fayda hemen görünmez. Avantajı görmek için bir sonraki beklenmedik değişiklik isteğini beklemeniz gerekir. Bu yüzden çoğu durumda genellemeye bağlı olanlar, kompozisyonu benimseyenlerle karşılaştırıldığında başarısız olurlar (daha sonra bahsedilen açık bir vaka hariç). Dolayısıyla kural. Bir öğrenme açısından bakıldığında, bir bağımlılık enjeksiyonunu başarılı bir şekilde uygulayabiliyorsanız, hangisinin hangisini tercih edeceğini bilmelisiniz. Kural, hangisini seçeceğinizden emin olmadığınızda karar vermenize yardımcı olur. Yine her iki seçeneği de görebilmek için ilk etapta görebilmeniz gerekir.
Özet: Kompozisyon: Bağlama sadece daha büyük bir şeye taktığınız bazı küçük şeylere sahip olarak azaltılır ve büyük nesne daha küçük nesneyi geri çağırır. Genelleştirme: Bir yöntemin geçersiz kılınabileceğini tanımlayan bir üçüncü taraf API bakış açısından, bir yöntemin çağrılabileceğini tanımlamaktan daha güçlü bir taahhüttür (Genelleştirme için kesin kazanç). Kompozisyon ile de genellemeyi büyük bir sınıf yerine bir arayüzden kullandığınızı asla unutmayın. Ancak tüm kredi maalesef kompozisyona gidiyor.