wevtimoteo

kairos _ sharing _ tech _ learning _ kaizen _ path


O que significa 'Class Cluster' no iOS

Posted on Monday, 6 Oct 2014 by Weverton Timoteo

Tags:

Class Cluster é um design pattern usado no framework Foundation.

O objetivo desse pattern é agrupar subclasses privadas a partir de uma superclasse pública abstrata.

Sem Class Cluster

Imagine o seguinte cenário: você precisa armazenar diversas medidas, milímetros, centímetros, metros, quilômetros.

O que todas essas medidas possuem em comum? Elas podem ser convertidas (ex.: metros => centímetros) e podem ser representadas por uma única classe. No entanto, o armazenamento de cada uma delas pode ser diferente.

Para lidar com este cenário poderíamos implementar da seguinte maneira:

Comprimento é nossa superclasse que declara os métodos principais de operações que todas as outras subclasses terão em comum.

Neste exemplo as subclasses são públicas, ou seja, você pode instanciá-las diretamente.

O conceito é simples mas a interface começa a ficar complexa de acordo com a quantidade de subclasses.

Com Class Cluster

Com o mesmo cenário, vamos imaginar uma solução diferente: ao invés das subclasses públicas teremos apenas nossa superclasse pública. E como iremos instanciar uma subclasse irá depender do que nossa superclasse Comprimento suporta.

Agora é responsabilidade da superclasse dizer qual objeto deve ser criado a partir do método de classe que for chamado.

Exemplo:

WWLength *aMeter = [WWLength lengthWithMeter:1];

Cada objeto retornado pelo seu método de factory pode pertencer a um tipo de instância da subclasse. Mas não se esqueça, neste caso a subclasse está oculta, você não a conhece, então nossa instância aMeter é do tipo WWLength.

Esse é o conceito do Class Cluster, que é utilizado intensamente no framework Foundation.

Dê uma olhada na documentação para obter mais informações de classes do Foundation que seguem esta abordagem: Cocoa Core Class Cluters