Non c'è davvero alcuna differenza; un cluster di classe è un'implementazione specifica del pattern Factory. Nel cluster di classi, l'inizializzatore viene utilizzato come metodo di produzione per decidere quale istanza restituire.
Stilisticamente, il cluster di classi sarà familiare agli utenti della tua API perché è comune nei framework Apple: le classi di raccolta, le classi di numeri e altre utilizzano il pattern. Soddisfa anche il modello di livello superiore di Smalltalk e Objective-C in cui l'oggetto di classe è stesso un factory per le sue istanze.
Inoltre, il cluster di classe significa meno cose da ricordare: piuttosto che pensare "Devo fare un ThingFactory
quindi chiamare [factory thingForCase: foo]
" loro guardano solo l'inizializzatore per Thing
, che è quello che probabilmente dovresti raggiungere per impostazione predefinita.
C'è una situazione in cui potresti raggiungere un'implementazione più "classica" di Factory, che è (come discusso nel thread dei commenti) dove gli oggetti che potresti restituire non saranno necessariamente sottoclassi di un genitore comune. Nel modello di cluster di classi, esiste una superclasse comune e il codice client considera qualsiasi oggetto restituito come un'istanza di quella superclasse. Se questa restrizione nella gerarchia di tipi non è adatta al tuo caso, un cluster di classe non funzionerà.