Обмен технологиями

Исследование шаблонов проектирования: шаблон цепочки ответственности

2024-07-11

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Какова модель цепочки ответственности?

модель цепочки ответственности (Шаблон цепочки ответственности) — это шаблон поведенческого проектирования. Определение следующее:

  • Избегайте связывания отправителя и получателя запроса и дайте возможность нескольким объектам обработать запрос.
  • Соедините объекты, получающие запрос, в цепочку и передайте запрос по этой цепочке до тех пор, пока объект не сможет его обработать.
    Вставьте сюда описание изображения

2. Роль модели цепочки ответственности

  • Разделите запросы и их обработку, чтобы улучшить масштабируемость кода.

3. Структура модели цепочки ответственности

Вставьте сюда описание изображения

Модель цепочки ответственности в основном включает в себя следующие роли:

  • Роль абстрактного обработчика: Определить интерфейс для обработки запросов, включая абстрактные методы обработки и последующее соединение (каждый обработчик в цепочке имеет переменную-член для сохранения ссылки на следующий обработчик).
  • Роль бетонщика: реализовать метод обработки абстрактного процессора, чтобы определить, может ли запрос быть обработан. Если запрос может быть обработан, обработайте его, иначе запрос будет передан его преемнику.
  • Роль клиента: Создайте цепочку обработки и отправьте запрос конкретному объекту-обработчику в начале цепочки. Детали обработки и процесс доставки запроса не важны.

В реальной разработке модель цепочки ответственности может добавлять менеджера цепочки ответственности для управления конкретными процессорами.

4. Применение модели цепочки ответственности в реальной разработке

В SpringBoot существует множество способов реализовать шаблон цепочки ответственности. Ниже приведен пример: множественная независимая логика проверки для процесса заказа.
Вставьте сюда описание изображения

4.1 Способ реализации 1
  1. Создать Pojo, объект заказа
public class OrderContext {
    private String seqId;
    private String userId;
    private Long skuId;
    private Integer amount;
    private String userAddressId;
    // Getters and setters
}