Можете объяснить основные способы реализации паттерна Responder Chain?
AI-дан жауап
sobes.tech AI
Паттерн Responder Chain используется для передачи событий или запросов по цепочке объектов, пока один из них не обработает событие.
Основные способы реализации:
-
Цепочка через ссылки на следующий объект — каждый объект содержит ссылку на следующий обработчик. Если текущий не может обработать событие, передаёт его дальше.
-
Использование делегатов или протоколов — объект вызывает метод делегата, который может передать событие дальше.
-
В 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 позволяет гибко иерархически обрабатывать события без жёсткой связи между отправителем и получателем.