Treci la conținutul principal

Ce este

Șablonul Factory Method ascunde crearea unui obiect în spatele unei funcții. Apelantul spune ce vrea — fabrica decide ce tip concret să construiască și îl returnează ca interfață.

Apelantul nu atinge niciodată tipurile concrete, așa că se pot adăuga tipuri noi fără a schimba codul care apelează. În Go aceasta este pur și simplu o funcție NewSomething() care returnează o interfață.


Exemplu: o fabrică de stocare

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

Fabrica alege tipul

Instrucțiunea switch peste tipuri se află într-un singur loc — în fabrică. Restul programului cunoaște doar interfața.

Prompt
Scrie un program Go 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 tip. Creează ambele tipuri prin fabrică și salvează o comandă cu fiecare, afișând rezultatele.
Ieșire: program Go și rezultatul capturat

Când să îl folosești

Folosește-l când tipul concret depinde de ceva cunoscut abia la rulare — o valoare din configurare, o alegere a utilizatorului, un mediu de execuție — sau când vrei logica de creare într-un singur loc.

Renunță la el când există o singură implementare și niciun semn că ar urma a doua. store := 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 nou atinge doar fabrica.

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