2015-11-30 2 views
5

geblättert ich das Internet, aber ich konnte keine Antwort auf meine Frage finden ...Zuständigkeitskette - übergeben Sie die Anforderung durch alle Ketten

Lets sagen, ich habe 3 Ketten. Ich möchte, dass die Anfrage alle 3 Ketten passiert (es spielt keine Rolle, ob die Kette die Anfrage bearbeiten kann oder nicht). Ist es möglich, CoR-Muster für dieses Problem zu verwenden?

Um es besser zu erklären - ich habe eine Liste, die mehrere Regelwerke durchlaufen muss. Wenn es die erste Regel besteht, bleibt die Liste gleich. Dann geht es weiter zur 2. Regel und die 2. Regel ändert eine Liste. Die geänderte Liste geht an die 3. Regel, sie vergeht und die geänderte Liste wird gespeichert. Chains

+1

Kudos für das schöne Diagramm. Du bekommst einen Punkt dafür. Aber es wird sehr schwierig sein, Ihre Frage zu beantworten, weil Sie uns fragen, ob eine Verantwortungskette eine gute Lösung für Ihr Problem ist, aber alles, was wir über Ihr Problem wissen, ist, dass es ein Problem ist, das Ihrer Beschreibung nach erfordert eine Kette von Verantwortung. Auch: programters.stackexchange.com ist für Fragen dieser Art besser geeignet als stackoverflow. –

+0

Wenn Sie nicht darauf bestehen, die Verantwortungskette zu nennen, können Sie sie einfach so implementieren, dass alle Handler in der Kette die Liste bis zum Ende durchlaufen müssen. – zapl

+1

@MikeNakis wenn andere Seiten verwiesen werden, ist es oft hilfreich zu zeigen, dass [Cross-Posting ist verpönt] (http://meta.stackexchange.com/tags/cross-posting/info) – gnat

Antwort

1

Hm, ich sehe kein Gegenargument, das nicht zu tun.

Sie können einfach erklären, um Ihre Processor oder aber Sie rufen, dass:

abstract class Processor { 
    private Processor successor; 

    public void setSuccessor(Processor successor) { this.successor = successor; } 

    public List process(List input) { 
     List processed = this.internalProcess(input); 
     if (successor != null) { return successor.process(processed); } 
     return processed; 
    } 

    protected abstract List internalProcess(List input); 

} 

und dann können Sie zum Beispiel festlegen:

public class ProcessorNoProcess extends Processor { 

    @Override protected List internalProcess(List input) { 
     // do nothing 
     return input; 
    } 
} 

Ist das, was Sie gefragt wurden?

+0

'setSuccessor()' darf nicht privat sein. –

+0

Genau das, was ich gesucht habe, danke @ k0ner – mirta