Domanda

Stavo leggendo che NSArray è proprio una cosa del genere.Sembra pesante.Ho 7 libri davvero grossi qui sulla mia scrivania su Objective-C, Cocoa e C.Nessuno di loro menziona affatto Class Cluster, almeno non riesco a trovarlo nell'indice in fondo ai libri.Allora, cos'è quello?

È stato utile?

Soluzione

Dai documenti di Apple....In breve, è un design pattern utilizzato nel framework Foundation, motivo per cui probabilmente non è menzionato nei libri ObjC.

Un cluster di classi è un'architettura che raggruppa una serie di sottoclassi private e concrete sotto una superclasse pubblica e astratta.Il raggruppamento di classi in questo modo fornisce un'interfaccia semplificata all'utente, che vede solo l'architettura visibile pubblicamente.

Altri suggerimenti

Non so che cosa è nel CDP che Steve riferimento ma in fondo il Cluster Objective-C Class è un costrutto che supporti l'attuazione del astratto fabbrica modello.

idea è semplice : Si desidera fornire un'interfaccia di fabbrica (Cluster) che, con la descrizione minima, produce e restituisce un'istanza concreta specifica di un oggetto di fabbrica che soddisfa il comportamento della famiglia di cluster descritto dall'interfaccia fabbrica (cluster).

Un semplice esempio concreto : Questo esempio fornisce una fabbrica risata che produce classi concrete di tipi specifici risa (ad esempio guffaw, Giggle). Prestare attenzione al Laugh initWithLaughter:. metodo

In Laugh.h:

#define kLaughWithGuffaw  1
#define kLaughWithGiggle  2

@interface Laugh: NSObject {}
- (Laugh *) initWithLaughter:(NSUInteger) laughterType;
- (void) laugh;
@end

In Laugh.m:

@interface Guffaws:Laugh {}
- (void) laugh;
@end

@interface Giggles:Laugh {}
- (void) laugh;
@end

@implementation Laugh
- (Laugh *) initWithLaughter:(NSUInteger) laugherType {
    id instanceReturn=nil;
    ; // Removed for ARC [self release]
    if ( laughterType == kLaughWithGuffaw )
        instanceReturn = [[Guffaws alloc]init];
    else if( laughterType == kLaughWithGiggle )
        instanceReturn = [[Giggles alloc]init];
    else
        ; // deal with this
    return instanceReturn;
}

- (void) laugh {
    NSLog(@"Humbug");
}
@end

@implementation Guffaws
    - (void) laugh {
        NSLog(@"OH HA HA HOWAH HA HA HA");
    }
@end

@implementation Giggles
    - (void) laugh {
        NSLog(@"Tee hee");
    }
@end

Dalla programmazione in Objective C da Stephen Kochan a pagina 498 nel glossario, cluster:

  

Una classe astratta che raggruppa un insieme di   sottoclassi concrete privati, fornendo   un'interfaccia semplificata per l'utente   attraverso la classe astratta.

cluster Class forniscono un'unica interfaccia pubblica di un gruppo di calcestruzzo, le implementazioni sottoclasse privati. Un programmatore di Objective-C utilizza cluster di livello spesso e raramente si rende conto che - e questo è il punto centrale di un cluster di classe. Il lavoro di un gruppo di classe è quello di nascondere la complessità del dettaglio di implementazione dietro un'interfaccia pubblica.

Molte delle classi della Fondazione sono cluster di livello, come ad esempio NSString, NSArray, NSDictionary e NSNumber. Quando si chiama [NSString stringWithFormat:] il cluster di classe ti dà una certa classe concreta che implementa l'interfaccia NSString. Potrebbe essere un NSConcreteString, NSCFString, NSFooBarString, ecc, che il cluster di classe dà si basa sul costruttore o di inizializzazione che si sta chiamando e gli argomenti.

A causa di questo, i cluster di classe sono uno dei concetti più consentono di coinvolgere in programmazione Objective-C.

  • molto facile da implementare
  • Facile cambiare l'implementazione sottostante senza modificare il codice che lo chiama.
  • facile fornire differenti implementazioni concrete in fase di esecuzione (risorse di test vale a dire o oggetti mock)
  • A causa di quanto sopra, facile da testare e refactoring

Se si proviene da altre lingue si può avere familiarità con la Banda dei Quattro modelli. cluster di livello hanno elementi sia della fabbrica astratta e gli schemi di facciata.

documentazione pubblica di Apple copre cluster di livello (e come implementare ed estenderli) molto spazio all'argomento. Purtroppo, ho scoperto che per gli sviluppatori iOS molti questo e altri modelli specifici di cacao sono un punto cieco.

cacao competenze chiave: Classe grappolo

cacao Guida alle nozioni fondamentali: cluster di livello

Esempi di come implementare i cluster di classe proprio sono disponibili su GitHub

Il cluster di classe NSArray non è "pesante", è un modo per qualsiasi numero di implementazioni di una classe di serie per essere utilizzato senza il vostro codice di sapere o preoccuparsi della particolare implementazione. Sotto il cofano, ci sono sottoclassi concrete di NSArray che sono appropriati per diversi casi di utilizzo, ad esempio grandi array sparsi, o array contenenti un numero specifico di elementi che sono noti al momento della compilazione.

NSArray, NSString e NSNumber sono i cluster di livello che molto spesso incontrano.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top