2009-05-13 16 views
6

C'è una buona discussione di questo nel general case.Perché la classe Pattern Java utilizza un metodo factory anziché un costruttore?

Tuttavia, mi chiedevo specificamente perché la classe Pattern utilizza il metodo statico compile per creare un oggetto, piuttosto che il costruttore?

Mi sembra più intuitivo utilizzare un costruttore.

+0

Per ulteriori informazioni, vedere l'articolo di [Dr. Joshua Bloch] (https://en.wikipedia.org/wiki/Joshua_Bloch), tracciando il suo libro * Effective Java * (2e): [* Creazione e distruzione di oggetti Java - Articolo 1: considera metodi di factory statici invece di costruttori *] (https://www.informit.com/articles/article.aspx?p=1216151) –

risposta

9

La classe Pattern è più recente di molte cose nel JDK. Come tale, credo che abbiano adottato l'approccio più moderno di utilizzare i metodi di fabbrica piuttosto che l'approccio più vecchio dei costruttori pubblici. Non è possibile aggiornare i metodi di fabbrica alle classi esistenti.

In generale, non ci sono molti motivi per utilizzare un costruttore su un metodo di produzione, quindi penso che sia tutto lì. I metodi di fabbrica ti permettono di creare oggetti astratti, che possono essere piuttosto utili.

6

Perché dovresti eseguire due istanze dello stesso numero di espressione regolare Pattern? Un metodo di creazione statica consente alle implementazioni di memorizzare nella cache i valori Pattern a volte restituendo lo stesso oggetto se viene richiesta la stessa espressione regex più volte. Compilare Pattern s può essere costoso. Inoltre, se fossero diventati necessari ulteriori metodi compile (ad esempio sintassi differenti), potrebbero essere forniti nomi diversi invece di un insieme di costruttori con un sovraccarico confuso.

+0

In generale l'argomento è corretto. Ma questo tipo di ottimizzazione dovrebbe essere lasciato facoltativo, penso. Tuttavia ci sono molti altri punti in cui questa ottimizzazione avrebbe potuto essere applicata. – ordnungswidrig

2

Anche l'utilizzo di un metodo factory per Pattern potrebbe consentire l'utilizzo di un'implementazione regex plug-in di terze parti. Sfortunatamente, Sun non ha implementato nessuna delle funzionalità che è possibile ottenere quando si utilizza un metodo factory (abilità plug-in, memorizzazione nella cache).

5

Il modello di fabbrica statico viene utilizzato quando vi sono buone possibilità che l'implementazione sottostante possa essere modificata in un modo che potrebbe influire sul costruttore. In breve, la fabbrica consente una notevole flessibilità per il manutentore della biblioteca senza essere vincolata dalla compatibilità binaria e di origine sul lato della costruzione.

Vedere http://en.wikipedia.org/wiki/Factory_method_pattern per i dettagli, in particolare la sezione "Altri vantaggi e varianti".

Problemi correlati