Pattern di cluster classe Objective-C

5

Ho molti sottolotti di una classe. Scelgo classi concrete in base al tipo (enum semplice). Mi piace l'idea del cluster di classe. Dovrei usarlo o semplicemente creare factory class (ma ogni classe in ogg-c è in realtà una fabbrica)?

Qual è la differenza tra pattern factory e pattern cluster classe. Quando usarlo nel tuo codice e perché?

    
posta Denis Mikhaylov 02.04.2013 - 10:53
fonte

2 risposte

6

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à.

    
risposta data 02.04.2013 - 11:29
fonte
-1

Il cluster di classe significa meno cose da ricordare: piuttosto che pensare "Devo creare un ThingFactory e poi chiamare [factory thingForCase: foo]" guardano solo l'inizializzatore di Thing, che è probabilmente quello che probabilmente otterresti di default.

    
risposta data 18.09.2015 - 09:13
fonte

Leggi altre domande sui tag