2015-11-30 10 views
5

przeglądałem w internecie, ale nie mogę znaleźć odpowiedzi na moje pytanie ...Chain of Responsibility - przekazać wniosek przez wszystkich łańcuchów

Powiedzmy mam 3 łańcuchy. Chcę, aby żądanie przesłało wszystkie 3 łańcuchy (nie ma znaczenia, czy łańcuch może obsłużyć żądanie, czy nie). Czy jest możliwe wykorzystanie wzoru KR-u dla tego problemu?

Aby wyjaśnić to lepiej - mam listę, która musi przejść przez kilka zestawów zasad. Jeśli przejdzie pierwszą regułę, lista pozostanie taka sama. Następnie przechodzi do drugiej reguły, a druga reguła zmienia listę. Zmieniona lista przechodzi do trzeciej reguły, przechodzi, a zmieniona lista zostaje zapisana. Chains

+1

Kudos za ładny schemat. Dostajesz punkt za to. Ale bardzo trudno odpowiedzieć na twoje pytanie, ponieważ pytasz nas, czy łańcuch odpowiedzialności jest dobrym rozwiązaniem twojego problemu, ale wiemy tylko o twoim problemie, że jest to problem, który zgodnie z Twoim opisem wymaga rozwiązanie oparte na łańcuchu odpowiedzialności. Również: programmers.stackexchange.com jest bardziej odpowiedni niż stackoverflow na pytania tego rodzaju. –

+0

Jeśli nie nalegasz na nazywanie go łańcuchem odpowiedzialności, możesz go po prostu zaimplementować tak, aby wszyscy sprzedawcy w łańcuchu musieli przekazywać listę do końca. – zapl

+1

@MikeNakis podczas odnoszenia się do innych stron, często pomocne jest wskazanie, że [cross-posting jest źle widziana] (http://meta.stackexchange.com/tags/cross-posting/info) – gnat

Odpowiedz

1

Hm, nie widzę przeciwnego argumentu, aby tego nie robić.

można po prostu zadeklarować Processor czy jakkolwiek nazwać:

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); 

} 

a następnie można określić na przykład:

public class ProcessorNoProcess extends Processor { 

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

że to, co pan pyta?

+0

'setSuccessor()' nie może być prywatne. –

+0

Dokładnie tego, czego szukałem, dzięki @ k0ner – mirta

Powiązane problemy