Başvurunuzda birçok Abstract dersi olması uygun mudur?


9

Başlangıçta, müşterek bir arabirimde yöntemlerin çeşitli uygulamaları ile bir Strateji modeli uygulamak istedik. Bunlar kullanıcı girdilerine göre çalışma zamanında alınacaktır.

Anlaşıldığı üzere, 3 - 5 ortak yöntem uygulayan Soyut sınıflarımız var ve değişken bir uygulama için sadece bir yöntem kaldı, yani Strateji.

Güncelleme: Birçok soyut sınıfla kastediyorum 6 farklı üst düzey işlevsellik vardır, yani 6 paket ve her birinin arayüz + AbstractImpl + (bir dizi Gerçek Impl) vardır.

Bu herhangi bir şekilde kötü bir tasarım mı?

Daha sonra genişletilebilirlik açısından herhangi bir olumsuz görüş - yaşlılar ile bir kod / tasarım inceleme için hazırlıyorum.

Yanıtlar:


8

Hayır, bu kesinlikle kötü bir tasarım değildir. Bu bir şablon yöntemi kalıbı .

Muhtemelen senaryonuzda geçerli olan bir algoritma adımının değişen davranışını kapsüllemek içindir. Strateji ve şablon yöntem kalıpları birçok durumda güçlü bir kombinasyon oluşturur . Muhtemelen bir çerçeve olarak soyut stratejileriniz vardır ve somut stratejiler için şablon yöntemi modelini kullanın. Oldukça temiz.

Genişletilebilir ve ayrıca kodu tekrarlamanız gerekmez. Tamamen farklı bir şeye ihtiyacınız olduğunda, yeni bir soyut veya somut strateji oluşturmak için strateji arayüzünü kullanmanız yeterlidir.


4

Hayır, oldukça iyi olabilir (detaylara bağlı olarak - somut durumunuz hakkında bu küçük bilgi ile daha fazlasını söylemek zor). Soyut bir temel sınıfta ortak yöntem uygulamalarını birleştirmek gayet iyi.

Tek soyut yöntemin sınıflarınızda nasıl kullanıldığına bağlı olarak, bu model yine de Strateji yerine bir Şablon yöntemi olabilir . Yani, doğrudan dış dünyadan ziyade, temel sınıfta başka bir yöntemle çağrılırsa.


1

Şablon Yöntemi Desenler, alt yöntemi soyut yöntemle özel kod uygulamak için yapar ve alt sınıf, ortak yöntemi üst sınıftan devralır. Bu yüzden bunun pek çok Abstract sınıfı olduğunu düşünmüyorum, sadece bir Abstract sınıfı, tüm alt sınıflar örnek sınıfıdır.


0

Soyut sınıflar aynı yöntemlerle aynı içeriğe alıştırıyorsa, neden birden fazla soyut sınıf var?

Yöntemleri farklı şekilde ifade ediyorlarsa, bir sorun görmüyorum.

Genişletilebilirliği kullanmak için arabirimleri kullanın, daha sonra soyut sınıf (lar) ı kazımak daha az sorun yaratır

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.