Ce este
Șablonul Factory Method pune crearea unui obiect în spatele unei funcții. Apelantul spune ce dorește — fabrica decide ce clasă concretă să construiască și o returnează ca interfață.
Apelantul nu atinge niciodată clasele concrete, așa că se pot adăuga tipuri noi fără a schimba vreun cod apelant. În TypeScript aceasta este pur și simplu o funcție createSomething() al cărei tip de return este interfața.
Exemplu: o fabrică de stocare
createStorage("disk") și createStorage("memory") returnează clase concrete diferite în spatele aceleiași interfețe OrderStorage — apelantul nu poate face diferența și nici nu are nevoie.
Fabrica alege clasa
Instrucțiunea switch pe tipuri se află într-un singur loc — fabrica. Restul programului cunoaște doar interfața, așa că bucla apelează store.save() fără să întrebe vreodată ce a primit.
Ieșire: program TypeScript și rezultatul capturat
interface OrderStorage {
save(data: string): string
}
class DiskStore implements OrderStorage {
save(data: string): string {
return "disk: salvat " + data
}
}
class MemoryStore implements OrderStorage {
save(data: string): string {
return "memory: păstrat " + data
}
}
// Fabrica decide ce clasă concretă să construiască.
function createStorage(kind: string): OrderStorage {
switch (kind) {
case "memory":
return new MemoryStore()
default:
return new DiskStore()
}
}
for (const kind of ["disk", "memory"]) {
const store = createStorage(kind)
console.log(store.save("comanda #1042"))
}
Când să îl folosești
Folosește-l când clasa concretă depinde de ceva cunoscut doar la rulare — o valoare din configurație, o alegere a utilizatorului, un mediu de execuție — sau când vrei logica de creare exact într-un singur loc.
Renunță la el când există o singură implementare și niciun semn al unei a doua. const 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 nou atinge doar fabrica.
Dezavantaje: încă un nivel de parcurs la citire; cu o singură implementare este pur ceremonial.