Treci la conținutul principal

Ce este

Șablonul Metoda fabrică ascunde crearea unui obiect în spatele unei funcții. Apelantul spune ce vrea — fabrica decide care clasă concretă se construiește și o returnează ca interfață.

Apelantul nu atinge niciodată clasele concrete, așa că se pot adăuga tipuri noi fără a modifica vreun cod apelant. În PHP aceasta este pur și simplu o funcție newSomething() — sau o metodă statică a unei clase — care returnează o interfață.


Exemplu: o fabrică de stocare

newStorage("disk") și newStorage("memory") returnează clase concrete diferite în spatele aceleiași interfețe Storage — apelantul nu poate deosebi diferența și nici nu are nevoie.

Fabrica alege clasa

Instrucțiunea match peste tipuri există într-un singur loc — fabrica. Restul programului cunoaște doar interfața.

Prompt
Scrie un script PHP cu o interfață Storage (metoda save), implementările DiskStore și MemoryStore și o funcție fabrică newStorage care returnează implementarea potrivită pentru un șir de caractere ce indică tipul, folosind match. Creează ambele tipuri prin fabrică și salvează o comandă cu fiecare, afișând rezultatele.
Ieșire: script PHP

Când să o folosești

Folosește-o atunci când clasa concretă depinde de ceva cunoscut doar la execuție — o valoare de configurare, o alegere a utilizatorului, un mediu — sau când vrei logica de creare exact într-un singur loc.

Renunță la ea când există o singură implementare și nici un semn al unei a doua. $store = new DiskStore() nu are nevoie de fabrică.


Avantaje și dezavantaje

Avantaje: logica de creare într-un singur loc; apelanții depind doar de interfață; adăugarea unui tip atinge doar fabrica.

Dezavantaje: încă un nivel prin care trebuie să citești; cu o singură implementare este pur ceremonial.