Делегация Objective C, объясненная программисту Java - PullRequest
9 голосов
/ 14 января 2009

Я довольно новичок в Objective-C, но опыт в Java. Существует ли эквивалентная концепция Objective-C «делегирование» в Java, чтобы я мог лучше понять это понятие? Будет ли способ эмулировать концепцию делегирования в Java?

Ответы [ 4 ]

9 голосов
/ 15 января 2009

Делегирование - это просто способ избежать создания подкласса объекта, такого как табличное представление, для реализации специфического поведения приложения, и вместо этого возложить эту ответственность на контроллер. Когда вы создаете табличное представление, вы назначаете ему объект контроллера, который реализует определенный набор методов (некоторые могут потребоваться, другие могут быть необязательными). Когда табличное представление нуждается в данных или должно принять решение о том, как отображать себя, оно спрашивает делегата, реализует ли он соответствующий метод, и вызывает его, если оно принимает свое решение.

4 голосов
/ 21 октября 2010

Вот способ думать о делегате - в типичном примере ООП у меня есть объект автомобиля. Я не хочу когда-либо снова создавать его подкласс, я просто хочу использовать его как есть, так как мне заставить его действовать как шеви или мустанг? Я даю это делегату.

У моей машины были бы методы, чтобы управлять, методы, чтобы сигналить и т. Д.

У моего делегата были бы такие методы, как «какова моя максимальная скорость» и «как звучит гудок» и «окрашены ли мои окна»

Поэтому, когда я вызываю -drive для моего автомобильного объекта (который не разделен на подклассы), этот метод вызывает метод topSpeed ​​моего делегата, и делегат сообщает ему 120 миль в час, поэтому автомобиль знает, как быстро он должен идти, не будучи мустанг.

в Задаче C обычно есть протокол, который определяет, на что должен ответить делегат, т. Е. Для делегата моего автомобильного объекта был бы протокол, объявленный так:

 @protocol carDelegate

 -(int)carTopSpeed;
 -(UIColor*)carColor;
 -(BodyShape*)carBodyShape;
 -(DragCoefficient*)carDragCoefficient;
 -(HoodOrnament*)carHoodOrnament     

 @optional
 -(BOOL)windowsTinted;

 @end

Затем вы можете создать свой собственный объект, который соответствует этому протоколу (реализует все необходимые методы и любые необязательные, которые рассматриваются как необходимые)

И объект car ожидает, что (id) будет передан ему как делегат.

Тогда автомобильному объекту удалось избежать подкласса, и он все еще может вести себя в соответствии с потребностями пользователя.

3 голосов
/ 15 января 2009

java.lang.reflect.Proxy является ближайшим эквивалентом в Java. Хотя использовать это утомительно.

2 голосов
/ 14 января 2009

Делегирование - это объектно-ориентированный шаблон проектирования. Пример на Java в Википедии: Шаблон делегирования

...