Sobes.tech
Junior — Middle
95

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

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 позволяет гибко иерархически обрабатывать события без жёсткой связи между отправителем и получателем.