Os clusters de classes fornecem uma única interface pública para um grupo de implementações concretas de subclasses privadas. Um programador objetivo-c usa clusters de classes com frequência e raramente percebe isso - e esse é o ponto principal de um cluster de classes. O trabalho de um cluster de classe é ocultar a complexidade dos detalhes de implementação por trás de uma interface pública.
Muitas das classes Foundation são clusters de classe, como NSString, NSArray, NSDictionary e NSNumber. Quando você chama [NSString stringWithFormat:]
a classe cluster está dando a você alguma classe concreta que implementa a NSString
interface. Poderia ser um NSConcreteString
, NSCFString
,NSFooBarString
, etc. Qual o cluster classe dá-lhe é baseado no construtor ou initializer você está chamando e os argumentos.
Por causa disso, os clusters de classe são um dos conceitos mais poderosos na programação Objective-C.
- Muito fácil de implementar
- Fácil de alterar a implementação subjacente sem alterar o código que a chama.
- Fácil de fornecer diferentes implementações concretas em tempo de execução (ou seja, recursos de teste ou objetos simulados)
- Por causa do acima, fácil de testar e refatorar
Se você está vindo de outras línguas, pode estar familiarizado com os padrões da Gangue dos Quatro. Os clusters de classes têm elementos tanto da fábrica abstrata quanto dos padrões de fachada.
A documentação pública da Apple cobre clusters de classes (e como implementá-los e estendê-los) de forma bastante extensa. Infelizmente, descobri que, para muitos desenvolvedores de iOS, esse e outros padrões específicos do Cocoa são um ponto cego.
Competências essenciais do cacau: grupo de classes
Cocoa Fundamentals Guide: Class Clusters
Exemplos de como implementar seus próprios clusters de classe estão disponíveis no GitHub