Los clústeres de clases proporcionan una única interfaz pública a un grupo de implementaciones de subclase privadas concretas. Un programador de objetivo-c usa grupos de clases a menudo y rara vez se da cuenta, y este es el objetivo de un grupo de clases. El trabajo de un clúster de clases es ocultar la complejidad de los detalles de implementación detrás de una interfaz pública.
Muchas de las clases Foundation son grupos de clases, como NSString, NSArray, NSDictionary y NSNumber. Cuando llamas [NSString stringWithFormat:]
al clúster de clases, obtienes una clase concreta que implementa la NSString
interfaz. Podría ser una NSConcreteString
, NSCFString
, NSFooBarString
, etc., que el grupo de clase le da se basa en el constructor o el inicializador que está llamando y los argumentos.
Debido a esto, los grupos de clases son uno de los conceptos más empoderadores en la programación de Objective-C.
- Muy fácil de implementar
- Fácil de cambiar la implementación subyacente sin cambiar el código que lo llama.
- Fácil de proporcionar diferentes implementaciones concretas en tiempo de ejecución (es decir, recursos de prueba u objetos simulados)
- Debido a lo anterior, fácil de probar y refactorizar
Si viene de otros idiomas, es posible que esté familiarizado con los patrones de la Banda de los Cuatro. Los grupos de clases tienen elementos tanto de la fábrica abstracta como de los patrones de fachada.
La documentación pública de Apple cubre los grupos de clases (y cómo implementarlos y extenderlos) de manera bastante extensa. Desafortunadamente, he descubierto que para muchos desarrolladores de iOS, este y otros patrones específicos de Cocoa son un punto ciego.
Competencias básicas del cacao: grupo de clases
Guía de conceptos básicos de cacao: grupos de clases
En GitHub hay ejemplos de cómo implementar sus propios clústeres de clases.