Örnek bir kompozit sınıf şemasında yaygın olarak gördüğünüz iki işlem hakkında bir sorum var.
* GetDescendents
* GetChild (int)kompozit desen tasarım soruları
Dosya ve Dizinler olmanın yaygın bir örnek, bunu çakacağım. İlgilenen işlemin Boyut olduğunu varsayalım, bu nedenle Dosya'nın gerçek bir boyutu vardır ve Dizin, GetDescendents'ın yinelemeli yinelemesinden türetilen bir Bedene sahiptir. Çok uzak çok iyi. Sorum, müşterinin GetDescendents'ı kullanmasıyla ilgili. Belirli bir işlem için resimler olan bir dizinde dosyalara ihtiyacınız olduğunu varsayalım. Yani pratikte, GetDescendents ve Children'ın bazı kombinasyonlarını kullanarak imageFiles'i (istemcinin tüm nested imageFiles veya yalnızca root düzeyinde olmasını istediklerine göre) döndürürsünüz.
Yani bir numaralı soru, istemcinin bunu anlamasını sağlamak yerine, bir kompozit üzerinde GetImageFiles yöntemine sahip olmaz mı? Ve kabul ederseniz, GetDescendents kompozisyonun dışındaki istemci arayanlara (ImageViewer gibi) maruz kalmak için hiç pratik değil mi?
GetChild (int) hakkında ikinci soru; int tek bir çocuğu döndürmek için bir sıra pozisyon indisidir? GetDescendents içine derinlik düzeyi? Bir müşterinin bu yöntemi nasıl kullanacağıyla ilgili bir örnek ne olurdu?
Alkış,
Berryl
Tam olarak. Benim sorum şu ki * hiç * kompozisyonların bir parçası olmayan ya da en azından onunla çok yakın bir ilişkiye sahip olan müşterilere çocuk operasyonlarını ifşa etmek anlamındadır - yani, onlar GetFilesOfType gibi bir istemci sarf malzemesi üretmek için dahili operasyonlardır(). – Berryl
@Berryl: sınıfınızın temsil ettiği şeye bağlıdır. "Desen" sadece bir uygulama detayıdır, önemli olan "kavram" dır. –