2016-03-29 44 views
0

Bir sınıfın birkaç örneğini oluşturmalı ve bunları bir diziye eklemeliyim (Şu anda bir ArrayList kullanıyorum, ancak gerekirse değiştirebilirim). Bunu, her biri farklı bir örnekte farklı olan, yaklaşık 20 başka sınıf için yapmalıyım. Her bir öğe için bir for döngüsünü yazmaktan ziyade bunu yapmanın daha verimli bir yolu ne olurdu?Nesne örneklerinin bilinmeyen sayıda oluşturulmasının etkili yolu

örn.

ArrayList<Tile> bag = new ArrayList<Tile>(); 
    num_tile_a = 10; 
    num_tile_b = 6; 
    num_tile_c = 4; 
    num_tile_d = 8; 

    for (int i = 0; i < num_foo; i++){ 
     bag.add(new Tile_a()); 
    .... 

DÜZENLEME: Bu örnekte, Tile_a, Tile_b, Tile_c ve Tile_d bütün Çini sınıfının farklı çocuk sınıflardır.

+0

10 örnek foo, 6 örnek çubuk, vb ister misiniz? – Gendarme

+0

Bu doğru. –

+0

Ayrı örneklere gereksiniminiz varsa, yalnızca '' Arrays.fill '' yalnızca bir örnek oluşturacağından (veya Java 8'deki akışlar arasında geçiş yapabilirsiniz) dönebilirsiniz. – Mena

cevap

3

Yorum yapamam bu yüzden bir cevap yazacağım ... 24 farklı döngüyü yazmanın yolu, nesnenin sayısını nesneyi oluşturabilen bir fabrikadan bir haritaya sahip olmak olacaktır.

şey daha sonra

interface <T> IFactory { 
T create(); 
} 

Ve

gibi Sadece sahip her sınıf için bir fabrika var.

Map<IFactory,Integer> factoryToNumOfInstances; 

) (bu sınıfların her Yapıcı varsayılan varsa Başka bir seçenek olacaktır ve size

Map<Class,Integer> classToNumOfInstances; 

yol haritası var ve sadece yöntemi newInstance çağırabilir herhangi jenerikleri kullanmayın;

clazz.newInstance(); 
+0

Her sınıf bağımsız değişkenleri olmayan bir varsayılan kurucuya sahiptir, bu yüzden işe yarayacak gibi görünüyor. Harita ne yapar? –

+0

Hmm, döngüden nasıl kurtuluyorsunuz? Yine de, örnekleri sahip olmanız gerektiği gibi, 'factory.create()' veya 'clazz.newinstance()' işlevini çağırmanız gerekir. Her iki deseni kullanmak, yaratım mantığını yeni (alt) sınıflara genişletmeyi kolaylaştıracak ve her potansiyel (alt) sınıf için yaratımın açılmasından kaçınacaktır.Muhtemelen aklında bu vardı, ama masum bir okuyucu bunu özleyebilir. – rpy

+0

@NickJarvis Harita, sadece kaç örnek oluşturmanız gerektiğini anlatmak olurdu. Fabrika yöntemini kaç kez ararsınız? – imps

İlgili konular