Протоколы
Говоря о Objective-C, протокол — это понятие языка Objective-C, поэтому его может понять компилятор. В частности, вы можете определить его по ключевому слову @protocol
.
Класс может объявить себя соответствующим протоколу с синтаксисом угла:
@interface MyClass <MyProtocol> // class MyClass conforms to protocol MyProtocol
Некоторые люди используют здесь слово принять, например, «класс MyClass
принимает протокол MyProtocol
».
Этот синтаксис будет понятен компилятору Objective-C, например, он может предупредить вас, если в MyProtocol
есть обязательные методы, которые не реализованы в MyClass
.
Узоры
(Дизайн программирования) Шаблоны – это абстрактные понятия, которые могут быть реализован на любом языке (полном по Тьюрингу). Вы пишете код для конкретного языка, а затем рассказываете людям об этом шаблоне. Компилятор не будет знать, назвали вы код каким-то модным словом или нет.
Адаптер — это особый шаблон. Его, опять же, можно использовать с любым языком программирования, хотя некоторые языки, например. Python упрощает это с помощью объявлений.
Я не знаком с концепцией Conformer.
Делегаты
Делегирование является частью шаблона делегирования. Он используется для решения проблемы, когда объект A
хочет что-то сделать с объектом B
, а затем хочет, чтобы B
мог поговорить с A
. Чтобы сделать этот разговор возможным, B
нужно будет кое-что знать о методах A
, но если A
очень сложный класс, то B
может быть вынужден знать "слишком много".
Шаблон делегирования решает эту проблему, явно объявляя протокол DelegateOfB
, определенный там, где определен B
. Затем любой класс, которому необходимо получить информацию от B
(например, A
), объявляет, что он соответствует DelegateOfB
, и реализует соответствующие методы. Следовательно, B
ничего не знает о A
, кроме того факта, что он соответствует DelegateOfB
.
Этот шаблон также может быть реализован на любом языке, но Cocoa/Cocoa Touch или большинство других сред Objective-C необычны тем, что делегирование используется в 90% случаев всякий раз, когда возникает вышеупомянутая проблема.
Здесь помогает то, что протоколы являются языковой функцией. Опять же, этот шаблон теоретически можно использовать на любом языке, даже на ассемблере :), но он будет более полезен для Objective-C, потому что вы можете объявить, что делегат должен соответствовать этому протоколу:
@property id<DelegateOfB> delegate;
и компилятор предупреждает вас, если он думает, что вы присваиваете что-то, что не соответствует DelegateOfB
.
В других языках обычно используются другие решения, такие как функции обратного вызова.
person
ilya n.
schedule
27.11.2013
adopt
иadapt
— разные английские слова? - person ilya n.   schedule 27.11.2013