Wzorzec projektowy Chains of Responsibility prowadzi do utworzenia łańcucha obiektów, które analizują żadanie. Analiza przeprowadzana jest kolejno przez każdy z nich. Obiekt może zapewnić obsługę żądania lub przekazuje to żądanie dalej, lub to i to.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public class Zadanie { private String title; private int value; public Zadanie(String title, int value) { this.title = title; this.value = value; } public void print() { System.out.println(title + " " + value); } public int getValue() { return value; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
public abstract class Lapacz { protected Lapacz nastepca; public void setNastepca(Lapacz lapacz) { nastepca = lapacz; } public abstract void lapZadanie(Zadanie zadanie); } public class LapaczNegatywny extends Lapacz { public void lapZadanie(Zadanie zadanie) { if (zadanie.getValue() < 0) { System.out.println("Łapacz negatywny łapie wartości mniejsze niż 0"); zadanie.print(); } else { if (nastepca != null) nastepca.lapZadanie(zadanie); } } } public class LapaczPozytywny extends Lapacz { public void lapZadanie(Zadanie zadanie) { if (zadanie.getValue() > 0) { System.out.println("Łapacz pozytywny łapie wartości większe niż 0"); zadanie.print(); } else { if (nastepca != null) nastepca.lapZadanie(zadanie); } } } public class LapaczNeutralny extends Lapacz { public void lapZadanie(Zadanie zadanie) { if (zadanie.getValue() == 0) { System.out.println("Łapacz neutralny łapie wartości równe 0"); zadanie.print(); } else { if (nastepca != null) nastepca.lapZadanie(zadanie); } } } public class TesterLapaczy { public static void main(String[] args) { Lapacz lapacz1 = new LapaczNegatywny(); Lapacz lapacz2 = new LapaczPozytywny(); Lapacz lapacz3 = new LapaczNeutralny(); lapacz1.setNastepca(lapacz2); lapacz2.setNastepca(lapacz3); lapacz1.lapZadanie(new Zadanie("Wartosc negatywna ", -5)); lapacz1.lapZadanie(new Zadanie("Wartosc pozytywna ", 1)); lapacz1.lapZadanie(new Zadanie("Wartosc negatywna ", -1)); lapacz1.lapZadanie(new Zadanie("Wartosc negatywna ", -2)); lapacz1.lapZadanie(new Zadanie("Wartosc neutralna ", 0)); lapacz1.lapZadanie(new Zadanie("Wartosc negatywna ", -1)); lapacz1.lapZadanie(new Zadanie("Wartosc pozytywna ", 1)); lapacz1.lapZadanie(new Zadanie("Wartosc neutralna ", 0)); lapacz1.lapZadanie(new Zadanie("Wartosc pozytywna ", 1)); lapacz1.lapZadanie(new Zadanie("Wartosc negatywna ", -1)); } } |
Diagram wzorca: