Bir programlama makalesi okuyordum ve Dekoratör modelinden bahsetti. Bir süredir program yapıyorum ama herhangi bir örgün eğitim ya da eğitim almadım, ama standart kalıpları ve benzerlerini öğrenmeye çalışıyorum.
Dekoratöre baktım ve üzerinde bir Wikipedia makalesi buldum . Şimdi Dekoratör deseni kavramını anlıyorum, ancak bu pasajla biraz karıştım:
Örnek olarak, bir pencere sistemindeki bir pencereyi düşünün. Pencere içeriğinin kaydırılmasına izin vermek için, uygun şekilde yatay veya dikey kaydırma çubukları eklemek isteyebiliriz. Pencerelerin Window sınıfının örnekleri ile temsil edildiğini ve bu sınıfın kaydırma çubuğu eklemek için işlevselliği olmadığını varsayalım. Bunları sağlayan bir alt sınıf ScrollingWindow oluşturabiliriz veya bu işlevi mevcut Window nesnelerine ekleyen bir ScrollingWindowDecorator oluşturabiliriz. Bu noktada, her iki çözüm de iyi olur.
Şimdi, pencerelerimize kenarlık ekleme yeteneğini de istediğimizi varsayalım. Yine, orijinal Window sınıfımızın desteği yok. ScrollingWindow alt sınıfı artık yeni bir tür pencere oluşturduğundan bir sorun oluşturmaktadır. Tüm pencerelere sınır desteği eklemek istiyorsak WindowWithBorder ve ScrollingWindowWithBorder alt sınıflarını oluşturmalıyız. Açıkçası, bu sorun eklenecek her yeni özellikle kötüleşiyor. Dekoratör çözümü için basitçe yeni bir BorderedWindowDecorator oluşturuyoruz - çalışma zamanında mevcut pencereleri, uygun gördüğümüz gibi ScrollingWindowDecorator veya BorderedWindowDecorator veya her ikisiyle de dekore edebiliriz.
Tamam, tüm pencerelere kenarlık eklemeyi söylediklerinde, neden seçeneğe izin vermek için orijinal Window sınıfına işlevsellik eklemiyorsunuz? Gördüğüm gibi, alt sınıflandırma sadece bir sınıfa belirli işlevler eklemek veya bir sınıf yöntemini geçersiz kılmak içindir. Mevcut tüm nesnelere işlevsellik eklemem gerekirse, neden bunu yapmak için üst sınıfı değiştirmiyorum?
Makalede başka bir satır daha vardı:
Dekoratör deseni, alt sınıflamaya bir alternatiftir. Alt sınıflandırma derleme zamanında davranış ekler ve değişiklik orijinal sınıfın tüm örneklerini etkiler; dekorasyon tek tek nesneler için çalışma zamanında yeni davranışlar sağlayabilir.
"... Değişiklik orijinal sınıfın tüm örneklerini etkiler" dedikleri yere ulaşamıyorum - alt sınıflama ana sınıfı nasıl değiştirir? Alt sınıflamanın bütün mesele bu değil mi?
Makalenin, birçok Wiki gibi, açıkça yazılmadığını varsayacağım. Dekoratörün bu son satırdaki yararlılığını görebiliyorum - "... tek tek nesneler için çalışma zamanında yeni davranışlar sağlayın."
Bu kalıbı okumadan, tek tek nesneler için çalışma zamanında davranışı değiştirmem gerekirse, muhtemelen söz konusu davranışı etkinleştirmek / devre dışı bırakmak için üst veya alt sınıfa bazı yöntemler inşa ederdim. Lütfen Dekoratörün faydasını gerçekten anlamama yardımcı olun ve yeni başlayan düşüncem neden kusurlu?