В паттерне Цепочка Обязанностей создается цепочка объектов, последовательно анализирующих запрос. Каждый объект получает запрос и либо обрабатывает его, либо передает следующему объекту в цепочки.
Преимущества
Недостатки
public class Handler { private Handler successor; //Принимаем ссылку на следующий объект (Приемник) public void setSuccessor(Handler successor) { this.successor = successor; } public Handler getSuccessor() { return successor; } public void handleRequest(int i) { successor.handleRequest(i); } } class ConcreteHandler1 extends Handler { public void handleRequest(int i) { if (i == 1) { System.out.println("Результат выполнение Handler1"); } else { System.out.print("Был задействован обработчик Handler1 "); getSuccessor().handleRequest(i); } } } class ConcreteHandler2 extends Handler { public void handleRequest(int i) { if (i == 2) { System.out.println("Результат выполнение Handler2"); } else { System.out.print("Был задействован обработчик Handler2 "); getSuccessor().handleRequest(i); } } } class ConcreteHandler3 extends Handler { public void handleRequest(int i) { if (i == 3) { System.out.println("Результат выполнение Handler3"); } else { System.out.print("Был задействован обработчик Handler3 "); getSuccessor().handleRequest(i); } } } class ConcreteHandler4 extends Handler { public void handleRequest(int i) { if (i == 4) { System.out.println("Результат выполнение Handler4"); } else { System.out.print("Был задействован обработчик Handler4 "); getSuccessor().handleRequest(i); } } }
public class Main { public static void main(String arg[]) { Handler handler1 = new ConcreteHandler1(); Handler handler2 = new ConcreteHandler2(); Handler handler3 = new ConcreteHandler3(); Handler handler4 = new ConcreteHandler4(); handler1.setSuccessor(handler2); handler2.setSuccessor(handler3); handler3.setSuccessor(handler4); handler1.handleRequest(1); handler1.handleRequest(2); handler1.handleRequest(3); handler1.handleRequest(4); } }
Результат выполнение Handler1 Был задействован обработчик Handler1 Результат выполнение Handler2 Был задействован обработчик Handler1 Был задействован обработчик Handler2 Результат выполнение Handler3 Был задействован обработчик Handler1 Был задействован обработчик Handler2 Был задействован обработчик Handler3 Результат выполнение Handler4