Les clusters de classes fournissent une interface publique unique à un groupe d'implémentations de sous-classes privées et concrètes. Un programmeur objective-c utilise souvent des clusters de classes et s'en rend rarement compte - et c'est tout l'intérêt d'un cluster de classes. Le travail d'un cluster de classes est de cacher la complexité des détails d'implémentation derrière une interface publique.
La plupart des classes Foundation sont des clusters de classes, tels que NSString, NSArray, NSDictionary et NSNumber. Lorsque vous appelez [NSString stringWithFormat:]
le cluster de classes, cela vous donne une classe concrète qui implémente l' NSString
interface. Il pourrait être un NSConcreteString
, NSCFString
, NSFooBarString
, etc. Ce qui le cluster de classe vous donne est basé sur le constructeur ou initialiseur vous appelez et les arguments.
Pour cette raison, les clusters de classes sont l'un des concepts les plus puissants de la programmation Objective-C.
- Très facile à mettre en œuvre
- Facile à changer l'implémentation sous-jacente sans changer le code qui l'appelle.
- Facile à fournir différentes implémentations concrètes au moment de l'exécution (c'est-à-dire des ressources de test ou des objets factices)
- En raison de ce qui précède, facile à tester et à refactoriser
Si vous venez d'autres langues, vous connaissez peut-être les modèles Gang of Four. Les clusters de classes ont des éléments à la fois de l'usine abstraite et des motifs de façade.
La documentation publique d'Apple couvre assez largement les clusters de classes (et comment les implémenter et les étendre). Malheureusement, j'ai trouvé que pour de nombreux développeurs iOS, cela et d'autres modèles spécifiques à Cocoa sont un angle mort.
Compétences principales de Cocoa: cluster de classes
Guide des fondamentaux du cacao: Clusters de classes
Des exemples d'implémentation de vos propres clusters de classes sont disponibles sur GitHub