Может ли делегирование быть реализовано на любом языке или оно зависит от языка?
В настоящее время я пытаюсь понять шаблон делегирования, и мне было интересно, является ли этот шаблон специфичным для языка, другими словами, должен ли язык иметь какую-то поддержку Protocols
, Interfaces
и т.д., чтобы этот шаблон работал или его можно было реализовать на любом языке?
Пример Swift:
protocol SendersMessageDelegate{
func shareMessage(message: String)
}
class Sender{
var sendersMessage: String = String()
var delegate: SendersMessageDelegate?
func sendMessage(sendersMessage: String) {
self.sendersMessage = sendersMessage
delegate?.shareMessage(sendersMessage)
}
}
class Receiver: SendersMessageDelegate{
var savedMessage:String?
func shareMessage(message: String) {
savedMessage = message
print(message)
}
}
var sender = Sender()
var receiver = Receiver()
sender.delegate = receiver
sender.sendMessage("Hello Receiver"
)
2 ответа
Протоколы / интерфейсы позволяют создавать чистую и общую спецификацию интерфейса между участвующими классами, но они не обязательны. Обычно делегирующий класс ничего не знает о делегате, кроме того, что он отвечает на набор методов, но опять же это не требуется - часто существуют явные тесты времени выполнения, чтобы проверить, отвечает ли он целевым методам или нет. Строго говоря, это также не обязательно должны быть занятия.
Таким образом, любой язык, в котором вы можете иметь несколько файлов кода / "объектов", которые ссылаются на другой, может быть описан как отношение делегата. Разница между делегированием и составом или простым вызовом может быть неясной. Абстрактные интерфейсы помогают склонить масштаб в сторону делегирования.
Любой объектно-ориентированный язык может иметь делегатов. Это просто шаблон проектирования, который более широко используется и поддерживается в iOS.
В статье о шаблонах делегирования Википедии даже есть примеры Java: https://en.wikipedia.org/wiki/Delegation_pattern