Domanda

Non ho mai usato prima di fabbriche per la semplice ragione, non capisco quando ne ho bisogno. Ho lavorato su un po 'di gioco nel mio tempo libero, e ho deciso di implementare FMOD per il suono. Ho guardato un involucro progettato per OpenAL (configurazione audio diversa) e sembrava qualcosa di simile ...

SoundObject * SoundObjectManager * SoundObjectFactory *

Il SoundObject era fondamentalmente l'istanza di ogni oggetto sonoro. Il SoundObjectManager solo gestisce tutti questi oggetti. Questo è abbastanza dritto in avanti e fa un sacco di senso, ma non ottengo ciò che la fabbrica sta facendo o che cosa serve. Ho letto su Factorys, ma ancora non si è davvero ottenere loro.

Qualsiasi aiuto sarebbe apprezzato!

È stato utile?

Soluzione

Pensate di fabbrica come un "costruttore virtuale". Esso consente di costruire oggetti con un tipo di tempo di compilazione comune, ma diversi tipi di esecuzione. È possibile passare un comportamento semplicemente raccontando la fabbrica per creare un'istanza di un diverso tipo di esecuzione.

Altri suggerimenti

Le fabbriche vengono utilizzati quando l'applicazione ha bisogno di essere parametrizzate. FMOD è multipiattaforma, ha bisogno di decidere cosa concreta attuazione per darvi per la propria piattaforma. Questo è ciò che la fabbrica sta facendo. Ci sono due modelli principali pattern Abstract Factory e Factory Method pattern .

situazione ipotetica: Sto scrivendo un libreria di suoni che voglio girare su più piattaforme. Cercherò di fare il maggior numero di codice come piattaforma di possibile essere indipendenti, ma di certo alcuni di essi sarà necessario cambiare per Windows rispetto a OSX contro Linux.

Così scrivo tutte queste diverse implementazioni, ma non voglio che l'utente finale di avere a fare loro programma dipendono da Linux o Windows o qualsiasi altra cosa. Anche io non voglio mantenere 4 interfacce diverse per il mio API. (Nota questi sono solo alcuni dei motivi è possibile creare una fabbrica - ci sono certamente altre situazioni).

Così mi definisco questa bella classe di base SoundObject generica che definisce tutti i metodi che la cliente ottiene da usare. Poi faccio la mia LinuxSoundObject, WindowsSoundObject, e altri 5 traggo da SoundObject. Ma ho intenzione di nascondere tutte queste implementazioni concrete da parte degli utenti e solo fornire loro un SoundObject. Invece, è necessario chiamare il mio SoundObjectFactory di afferrare quello che sembra di essere un vecchio SoundObject semplice, ma in realtà ho scelto il tipo di runtime corretto per voi e istanziato da solo.

2 anni più tardi, un nuovo sistema operativo avviene e spiazza di Windows. Invece di costringere a riscrivere il software, ho appena aggiorno la mia libreria per supportare la nuova piattaforma e non avete mai vedere un cambiamento all'interfaccia.

Questo è tutto abbastanza artificioso, ma si spera che si ottiene l'idea.

Le fabbriche isolare consumatori di un'interfaccia da che tipo di esecuzione (vale a dire l'attuazione) è realmente in uso.

Le fabbriche possono essere utilizzati per implementare l'inversione del controllo, e per separare il codice di istanza ( 'nuovi di) dalla logica dei componenti. Questo è utile quando si sta scrittura di unit test dal momento che non può decidere testato oggetti per creare un gruppo di altri oggetti.

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