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