Birçok OO dilinde bir sorun olmaz, çoklu miras gerektiren kod düzgün bir uygulama ile kavramsal bir sorun var, ama proje Android için olduğu gibi, çoklu gibi bir şey yok extends
.
Böyle basit gibi farklı temel sınıflar, türetilmiş faaliyetlerin bir demet var Activity
, TabActivity
, ListActivity
, ExpandableListActivity
, vb Ayrıca ben içine yerden gereken bazı kod parçaları var onStart
, onStop
, onSaveInstanceState
, onRestoreInstanceState
tüm faaliyetlerinde ve diğer standart olay işleyicileri.
Tüm etkinlikler için tek bir temel sınıf varsa, kodu özel bir ara türetilmiş sınıfa yerleştirmek ve sonra onu genişleten tüm faaliyetleri oluşturmak. Ne yazık ki, durum böyle değil, çünkü birden fazla temel sınıf var. Ancak aynı kod parçalarını birkaç ara sınıfa yerleştirmek bir yol değildir, imho.
Başka bir yaklaşım, bir yardımcı nesne oluşturmak ve yukarıda belirtilen olayların tüm çağrılarını yardımcıya devretmek olabilir. Ancak bu, yardımcı nesnenin dahil edilmesini ve tüm işleyicilerin tüm ara sınıflarda yeniden tanımlanmasını gerektirir. Yani burada ilk yaklaşımda pek bir fark yok - yine de çok sayıda kod kopyası.
Windows altında benzer bir durum ortaya çıkarsa, ben sınıfın alt sınıfını ( Activity
Android'de sınıfa karşılık gelen bir şey) alt gruplara alırdım ve orada uygun iletileri (tek bir yerde) yakalayabilirim.
Bunun için Java / Android'de neler yapılabilir? Java enstrümantasyonu ( bazı gerçek örneklerle ) gibi ilginç araçlar olduğunu biliyorum , ancak bir Java guru değilim ve bu özel durumda denemeye değer olup olmadığından emin değilim.
Başka iyi çözümleri de kaçırırsam, lütfen onlardan bahsedin.
GÜNCELLEME:
Android'de aynı sorunu çözmek isteyenler için basit bir çözüm buldum. Diğer şeylerin yanı sıra, ActivityLifecycleCallbacks arabirimini sağlayan Application sınıfı vardır . Tüm aktiviteler için önemli olaylara müdahale etmemize ve bir miktar değer katmamıza izin vermem gereken şeyi yapıyor. Bu yöntemin tek dezavantajı, birçok durumda yeterli olmayan API düzey 14'ten başlayarak kullanılabilir olmasıdır (API düzey 10 desteği bugün tipik bir gereksinimdir).
decordator pattern
. Bu aslında ne kaçınmak tercih ederim gösterir - kod çoğaltma son çare. Eğer başka bir fikir ortaya çıkmazsa cevabınızı kabul edeceğim. "Ara ürünlerin" kodunu genelleştirmek için jenerik ilaçları kullanabilir miyim?