0
Исправлено

Chain of Responsibility

Denys Makhov 7 lat temu Ostatnio zmodyfikowane przez anonymous 7 lat temu 1

Здравствуйте, спасибо за отличный сайт!

В Java реализации паттерна "Chain of Responsibility" допущена ошибка в методе:

public Middleware linkWith(Middleware next) {
        this.next = next;
        return next;
    }

Таким образом, после построения цепочки, всегда будет вызываться лишь последний элемент. Предлагаю заменить текущую логику на:

public Middleware linkWith(Middleware next) {
    if (this.next == null) {
        this.next = next;
    } else {
        this.next.linkWith(next);
    }
    return this;
}

Odpowiedź

Odpowiedź
Исправлено

Добрый день, Денис.


Спасибо за баг репорт. Я исправил баг немного по-другому, изменив порядок вызовов в клиентском коде.


Middleware middleware = new ThrottlingMiddleware(2);
middleware.linkWith(new UserExistsMiddleware())
        .linkWith(new RoleCheckMiddleware());


Odpowiedź
Исправлено

Добрый день, Денис.


Спасибо за баг репорт. Я исправил баг немного по-другому, изменив порядок вызовов в клиентском коде.


Middleware middleware = new ThrottlingMiddleware(2);
middleware.linkWith(new UserExistsMiddleware())
        .linkWith(new RoleCheckMiddleware());