Это статья о Шаблоне проектирования цепочки ответственности, в котором у нас есть отправитель и несколько получателей для обработки сообщения, которое отправитель отправляет получателю1, если получатель2 способен обработать сообщение, а затем получатель 1 отправляет его получатель 2 и так далее, если получатель 3 не может обработать сообщение, и сообщение будет отправлено обратно отправителю.
Чтобы лучше понять это, давайте рассмотрим пример из реальной жизни, предположим, что вы стажер в какой-то компании XYZ, и несколько дней назад вы задержались в офисе, чтобы решить какую-то важную производственную проблему, поэтому вы заказали такси, чтобы вернуться домой, и теперь вы хотите чтобы возместить сумму в 1000 индийских рупий за забронированное вами такси.
Но вот загвоздка: если возмещаемая сумма меньше или равна 500 индийских рупий, она может быть одобрена старшим разработчиком в команде, если сумма больше 500 или меньше или равна 1000 индийских рупий, то она может быть одобрена. руководителем группы, а любая другая сумма, превышающая 1000 индийских рупий, должна быть одобрена менеджером.
Я надеюсь, что теперь у нас есть представление о том, где использовать этот шаблон проектирования, где запрос проходит через различные приемники для обработки.
Итак, в компании XYZ используется одно веб-приложение, и вся вышеперечисленная логика уже реализована в нем с помощью шаблона проектирования цепочки ответственности.
Давайте перейдем к фактической реализации, давайте сначала создадим следующий интерфейс:
Здесь nextChain() предназначена для установки следующего обработчика получателя/запроса, а approveAmount() предназначена для обработки нашего бизнеса, когда мы решаем, обрабатывать ли запрос или направлять его в следующий получатель/обработчик запроса.
Теперь пришло время реализовать описанный выше интерфейс классами, которые будут обрабатывать запрос на утверждение суммы возмещения.
Теперь в нашем основном классе зададим цепочку и количество для обработки:
Здесь цепочка SeniorDev -> TeamLead -> Manager. Поскольку SeniorDev является первым в цепочке, запрос сначала придет к нему.
Но сумма в 1000 индийских рупий будет одобрена TeamLead, потому что SeniorDev может утвердить сумму до 500 индийских рупий.
Преимущества:
- Это уменьшает сцепление.
- Упрощенный объект. Объекту не нужно знать структуру цепочки.
- Увеличение обработки запросов новым классом очень удобно.
- Повышение гибкости возложенных на объект обязанностей. Изменяя членов в цепочке или изменяя их порядок, разрешайте динамическое добавление или удаление ответственности.
Недостатки:
- Запрос должен быть получен не гарантия.
- Это повлияет на производительность системы, но также непростая отладка кода может вызвать вызов цикла.
- Из-за отладки может быть непросто наблюдать за характеристиками работы.
Если вам понравилась эта статья, пожалуйста, похлопайте нам и, пожалуйста, подпишитесь на нас. И следите за новыми статьями.