2016-02-22 6 views
1

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

) 

ответ

1

Протоколы/интерфейсы позволяют создать чистую и общую спецификацию интерфейса между классами, участвующими, но они не являются обязательными. Как правило, делегирующий класс ничего не знает о делетете, кроме того, что он отвечает на набор методов, но опять же это не требуется - часто есть явные тесты времени выполнения, чтобы проверить, реагирует ли он на целевые методы или нет. Строго говоря, это тоже не нужно быть классами.

Таким образом, любой язык, на котором вы можете иметь несколько файлов кода/«объекты», которые ссылаются на другой, может быть описан как отношение делегата. Разница между делегацией и композицией или простым вызовом может быть шерстяной. Абстрактные интерфейсы помогают рассказать о масштабах делегирования.

+0

Как трудно было бы для вас, чтобы преобразовать мой пример кода, чтобы не использовать протоколы? –

+1

Ваша основная проблема будет убедить компилятор быть счастливым. Используя основы obj-c, так реагирует на селектор и селектор, что упрощает работу. В чистом быстром действии лучше всего использовать протоколы, и вы не должны действительно хотеть другого подхода ... – Wain

+0

Хм, так что, если я правильно понимаю, что «Делегирование» может быть выполнено на любом языке, но каждый «язык/компилятор» имеет его уникальный способ сделать это, это правильно (конечно, помимо разницы в синтаксисе) ?. –

1

Любой объектно-ориентированный язык может иметь делегатов. Это просто шаблон дизайна, который более широко используется и поддерживается в iOS.

делегация шаблон статьи Википедии есть даже Java примеры: https://en.wikipedia.org/wiki/Delegation_pattern