Sobes.tech
Back to questions
Junior — Middle
76

Можете объяснить основные способы реализации паттерна Responder Chain?

Answer from AI

sobes.tech AI

Паттерн Responder Chain используется для передачи событий или запросов по цепочке объектов, пока один из них не обработает событие.

Основные способы реализации:

  1. Цепочка через ссылки на следующий объект — каждый объект содержит ссылку на следующий обработчик. Если текущий не может обработать событие, передаёт его дальше.

  2. Использование делегатов или протоколов — объект вызывает метод делегата, который может передать событие дальше.

  3. В iOS (UIKit) — UIResponder реализует цепочку обработки событий. Например, при касании события передаются от UIView к его супервью, затем к контроллеру и дальше.

Пример на Swift:

class Handler {
    var next: Handler?
    func handle(request: String) {
        if canHandle(request) {
            print("Обработано: \(request)")
        } else {
            next?.handle(request: request)
        }
    }
    func canHandle(_ request: String) -> Bool {
        return false
    }
}

class ConcreteHandlerA: Handler {
    override func canHandle(_ request: String) -> Bool {
        return request == "A"
    }
}

class ConcreteHandlerB: Handler {
    override func canHandle(_ request: String) -> Bool {
        return request == "B"
    }
}

let handlerA = ConcreteHandlerA()
let handlerB = ConcreteHandlerB()
handlerA.next = handlerB
handlerA.handle(request: "B") // Обработано: B

Таким образом, Responder Chain позволяет гибко иерархически обрабатывать события без жёсткой связи между отправителем и получателем.