2016-06-11 12 views
0

Ich möchte Factory-Muster in meiner Anwendung, wo ich eine riesige (500k) Liste, sagen wir, Liste, von Objekten und ich durchlaufen, jetzt eine der Eigenschaft (SeatType) entscheidet, welche Klasse diese Liste zu verarbeiten, so dass, wenn Sitztyp Prämie ist es durch andere Klasse und in ähnlicher Weise für Wirtschaft und so weiter ...Unity IOC und Factory-Muster in einer großen Schleife

behandelt wird
class Bus 
{ 
    public SeatType Type { get; set; } 
} 

Da die Prüfung auf Sitztyp und damit der Prozessor zu finden ist passiert innerhalb der Schleife was ist der beste Weg, um die Instanz der Eigenschaft, die diesen Bus verarbeiten muss, aufzulösen?

Ich weiß, dass ich die Liste nach Sitztyp gruppieren und dann verarbeiten kann, aber ich bin interessiert zu wissen, ob es einen besseren Weg gibt, es ohne Gruppierung und nur mit der Schleife zu tun.

Vielen Dank im Voraus !!!

Edit:

In meinem Fall muss ich die Prozessoren wie der 5. Stufe, z.B. in for-Schleife Ich rufe ClassA.MethodA und dann ruft MethodA ClassB.MethodB und so weiter, bis ClassE.Methode.

Ich brauche die processors in ClassE, die 4-Level innerhalb der Schleife ist und nicht wollen, dass dieses Wörterbuch von Prozessoren von ClassA nach ClassB und so weiter.

Bitte helfen!

Antwort

1

Ich würde eine Dictionary verwenden, die eine Zuordnung zwischen SeatType und Verarbeitungsklasse hat. Und in jeder Iteration nehme ich den richtigen Prozessor von der Dictionary.

z.

Dictionary<SteatType, IProcessor> processors = new Dictionary<SteatType, IProcessor>(); 

for (int i = 0; i < buses.Length; i++) 
{ 
    Bus b = buses[i]; 
    IProcessor p = processors[b]; 
    // p.process(b); 
} 

Wenn Sie nicht wollen, die processors von Klasse A zu Klasse übergeben E Sie eine Helper Klasse erstellen können, die ein Singleton ist und hält die processors. Auf jeder Ebene können Sie den Singleton für den jeweiligen Prozessor aufrufen.

Oder vielleicht, wenn es möglich ist, was ich denke, sieht ganz besser Sie die processors im Konstruktor von den fünf Klassen A-E injizieren, so wäre es sogar möglich sein, unterschiedliche processorDictionaries auf verschiedenen Ebenen zu verwenden;)

+0

Dank ! Kevin. Diese Lösung eignet sich hervorragend für eine Schleife mit nur einer Ebene des Klassenmethodenaufrufs. Ich habe meine Frage mit weiteren Details zu meinem Problem bearbeitet. – Deepak

+0

Ich habe meine Antwort verbessert, hoffentlich wird es helfen :) –

+0

@Deepak ist die Frage beantwortet? –