Образец цепочки ответственности: несколько объектов соединены в цепочку с помощью ссылок, соответствующих следующему дому их объектов, и запрос передается в эту цепочку до тех пор, пока приемный объект в цепочке не обрабатывает запрос. Поскольку запрашивающий клиент не знает, кто в конечном итоге будет обрабатывать запрос в цепочке, система может динамически реорганизовать и выделять обязанности, не влияя на клиента, тем самым избегая связи между отправителем запроса и обработчиком запроса.
В цепочке ответственности участвуют три роли:
1. Роль абстрактного процессора
2. Конкретная роль обработчика
3. Небольшой пример отправителя запроса: Предположим, вы идете, чтобы купить дом, и вам нужно торговаться при покупке дома. Позиции человека, который продает дом, разные, а дисконтированные цены также разные. Различные позиции могут сформировать цепочку для обработки запроса. Мы предварительно устанавливаем: * Настоятельные продавцы могут предлагать только 3% скидки * Менеджер по продажам: 5% скидка * Директор по продажам: 8% скидка * Босс: 10% скидка
Экземпляр Java
Классовая диаграмма:
/ *** Абстрактная ответственность*/ public Abstract Class ifilter {private ifilter преемник; public ifilter getSuccessor () {return преемник; } public void setSuccessor (ifilter custoror) {this.successor = преемник; } public Abstract void handlefilter (); Public Abstract void handlefilter2 (); } / *** Конкретные обязанности*/ public Class ConcreteFilter Extends ifilter {private String name; public concretefilter (String name) {this.name = name; } @Override public void harderfilter () { / * * Сначала обрабатывайте его, если есть преемник, затем обработайте его один раз * / system.out.println (name + "Запрос обработан"); if (getSuccessor ()! = null) {getSuccessor (). handlefilter (); }} @Override public void handlefilter2 () { / * * Если есть преемник, то преемник будет обрабатываться самостоятельно. В противном случае вы справитесь с этим самостоятельно*/ if (getSuccessor ()! = Null) {getSuccessor (). Harderfilter2 (); } else {System.out.println (name + "Запрос обработан"); }}} Общедоступный тест класса {public static void main (string [] args) {ifilter filter1 = new Concretefilter («Filter-Filter»); // Фильтр разрешения Filter2 = New Concretefilter («Суффикс-фильтр»); // Filefix Filter3 = New Concretefilter ("стиль Filter"); Filter2.setsuccessor (Filter3); System.out.println ("----- Следующее обрабатывается каждым процессором (включая преемников), порядок также является проходом ровного уровня ------"); Filter1.handlefilter (); System.out.println ("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Печать:
------ Ниже приведен процесс каждого процессора (включая преемников), а порядок также составляет один уровень за другим ----- разрешающим фильтром обрабатывает обработку суффиксов запроса. Обрабатывает Filter-Filter запроса ------- Ниже приведен процесс последнего successor---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------