Может ли делегирование быть реализовано на любом языке или оно зависит от языка?

В настоящее время я пытаюсь понять шаблон делегирования, и мне было интересно, является ли этот шаблон специфичным для языка, другими словами, должен ли язык иметь какую-то поддержку 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

Другие вопросы по тегам