Кластеры классов предоставляют единый открытый интерфейс для группы конкретных частных реализаций подклассов. Программист на Objective-C часто использует кластеры классов и редко осознает это - и в этом весь смысл кластера классов. Задача кластера классов - скрыть сложность деталей реализации за общедоступным интерфейсом.
Многие из классов Foundation являются кластерами классов, например NSString, NSArray, NSDictionary и NSNumber. Когда вы вызываете [NSString stringWithFormat:]
класс, кластер предоставляет вам некий конкретный класс, реализующий NSString
интерфейс. Это может быть NSConcreteString
, NSCFString
, NSFooBarString
и т.д. Какой класс кластер дает на основе конструктора или инициализатора вы звоните и аргументы.
Из-за этого кластеры классов являются одной из самых вдохновляющих концепций в программировании на Objective-C.
- Очень легко реализовать
- Легко изменить базовую реализацию, не меняя вызывающий ее код.
- Легко предоставлять различные конкретные реализации во время выполнения (например, тестовые ресурсы или фиктивные объекты)
- Из-за вышеизложенного легко тестировать и рефакторинг
Если вы переходите с других языков, возможно, вы знакомы с паттернами «Банда четырех». Кластеры классов содержат элементы как абстрактной фабрики, так и паттернов фасада.
Публичная документация Apple довольно подробно описывает кластеры классов (а также способы их реализации и расширения). К сожалению, я обнаружил, что для многих разработчиков iOS этот и другие специфичные для Какао шаблоны являются слепым пятном.
Компетенции ядра какао: кластер классов
Руководство по основам какао: кластеры классов
Примеры того, как реализовать собственные кластеры классов, доступны на GitHub.