2009-10-15 20 views
14

È normale che le classi di fabbrica siano statiche e che anche i metodi di fabbrica siano statici.Metodi di creazione di fabbrica sempre statici?

Il GOF nel libro Design Patterns ha mai stabilito che le fabbriche ei loro metodi DEVONO essere statici per soddisfare la definizione rigorosa del modello?

Le fabbriche +/metodi statici sono solo una conseguenza del modello? i dati di stato non sono normalmente gestiti dalla classe factory, quindi sono normalmente statici.

risposta

11

Non credo che esista una "definizione rigorosa" di un modello. Con la loro natura esistono schemi per catturare l'essenza di un problema che si ripete di volta in volta nel software e delineare come potrebbe apparire una soluzione.

In particolare con il modello di fabbrica, no, non è necessario che i metodi di fabbrica siano statici. L'essenza del modello è che hai un oggetto che è responsabile della creazione di istanze di un'altra classe. Il modo in cui lo fai dipende solo da te, sebbene un modo comune, come descritto nel modello, sia quello di utilizzare un metodo statico su una classe. Tuttavia, abbiamo un meccanismo di fabbrica in uno dei nostri sistemi che è in realtà a due stadi. Si utilizza un metodo statico su una classe per creare l'oggetto factory, che può essere configurato per scegliere tra una serie di implementazioni e quindi utilizzare l'oggetto factory per eliminare le istanze dell'oggetto che è necessario eseguire il lavoro reale.

Considerare anche l'implementazione dello schema di fabbrica in una lingua che non ha metodi statici. Ad esempio, in Scala si usa un oggetto invece di una classe. Sebbene il comportamento di questo sia molto simile all'utilizzo di metodi statici su una classe in Java, la natura dell'implementazione è piuttosto diversa.

+2

+1 è davvero importante non aspettarsi che i pattern facciano il tuo pensiero per te, i pattern non sono rigidi, i pattern non sono clementi, i pattern non sono sotto controllo! – djna

6

No, le fabbriche possono contenere lo stato. Dipende da ciò che è necessario.

Suggerirei che la creazione di statica sia una buona scelta in prima istanza: hovewer nel momento in cui si tenta di rimuovere le statiche che si presentano nei problemi.

Sterzare fino a quando non ne hai bisogno.

+0

In alcune lingue –

3

No, codice di fabbrica per impostazione predefinita non deve essere statico. In realtà, le classi statiche non sono ben accette nel mondo OOP poiché possono anche trasmettere alcuni stati e quindi introdurre uno stato di applicazione globale. Se è necessario che sia presente un solo oggetto factory, è possibile controllarne la creazione tramite pattern singleton.

In caso di metodo di fabbrica - è ok per mantenerlo statico (in realtà non c'è altro modo ragionevole per andare :)).

0

Immagino che il mio BlueCarFactory e il mio RedCarFactory abbiano entrambi un metodo createCar. È solo un buon senso riutilizzare il metodo di creazione reale parametrandolo. Uno quindi creerebbe uno CarFactory(blue) e uno CarFactory(red). Ciò significa che l'oggetto CarFactory necessita di una variabile membro per memorizzare il colore delle auto prodotte.

Concludendo: non ha senso rendere statico il metodo di una classe Factory. Ha senso creare un oggetto Factory singleton.