2011-10-25 3 views
0

J'ai deux processus, ne différant que par la mise en œuvre de leurs styles de traitement ex. Process1 - traite la liste des éléments qui doivent être traités d'une manière et Processus 2 traite la liste des éléments qui doivent être traités d'une autre manièreDesign Pattern Review

Je veux Traiter une liste d'éléments et ensuite les faire passer par le processus 1 et processus 2 en fonction d'une propriété particulière de l'élément. Je veux ensuite une sortie combinée du nombre d'éléments de la liste traités dans chaque style.

J'ai choisi d'utiliser le motif "Chaîne de Resp". Je me demande si cela est un bon choix

Dim proc1 As New Process1 
Dim proc2 as New Process2 

proc1.nextProcessing(proc2) 
For each itm in itmlst 
    proc1.ProcessItem(itm) 
Next 

proc1.DoSomething() 
proc2.DoSomething() 

--result is an object that resturns the list of items processed by that process. 
Dim result1= proc1.EndPRocess() 
Dim result2= proc2.EndProcess() 
+0

Où se trouve la partie "chaîne de resp"? Suis-je aveugle? –

+0

Il semble que ce soit OK mais plus de code pourrait changer d'avis –

Répondre

0

J'utiliserais écrire mon propre Composite pour la liste et lui donner les méthodes suivantes:

class Composite { 
    Composite filter(Filter f); 

    void apply(Function f); 
} 

Vous pouvez séparer le filtrage et appliquer des fonctions qui vous donne plus d'options d'extensibilité et le composite gère l'itération pour vous. La classe Composite elle-même peut gérer le reporting du résultat de l'application de différents filtres.

+0

pourquoi Composite.filter retourne un composite d'éléments filtrés? Pourquoi ne pas simplement renvoyer une liste? – superartsy

+0

Composite est un wrapper pour une liste. –