Treci la conținutul principal

Ce este

Șablonul Abstract Factory (fabrica abstractă) creează familii întregi de obiecte înrudite, care merg împreună. Acolo unde o metodă-fabrică produce un singur produs, o fabrică abstractă produce un set potrivit — și garantează că piesele nu se amestecă niciodată.

Cazul clasic este tematizarea: o temă deschisă trebuie să producă butoane deschise și etichete deschise, niciodată un amestec.


Exemplu: o fabrică de teme

renderScreen primește orice UIFactory și construiește din ea un ecran coerent. Schimbarea întregului aspect ține de un singur argument — iar amestecarea temelor este imposibilă prin construcție.

O fabrică, o familie coerentă

Tema deschisă produce numai componente deschise, tema întunecată numai componente întunecate. renderScreen nu se schimbă niciodată.

Prompt
Scrie un script PHP cu o fabrică abstractă de interfață: interfețele Button și Label, o interfață UIFactory cu newButton și newLabel, plus fabricile LightTheme și DarkTheme care produc componente potrivite, deschise sau întunecate. O funcție renderScreen randează un ecran cu orice fabrică; randează un ecran deschis și unul întunecat.
Ieșire: script PHP

Când să îl folosești

Folosește-l atunci când mai multe obiecte trebuie să rămână coerente între ele — teme, seturi de componente specifice unei platforme, perechi potrivite de formate de import/export.

Renunță la el atunci când produsele nu trebuie să se potrivească între ele. Obiectele independente merită constructori independenți, nu o fabrică de familii.


Avantaje și dezavantaje

Avantaje: coerența familiei este garantată; familiile întregi se schimbă printr-o singură valoare; codul apelant depinde numai de interfețe.

Dezavantaje: foarte multe interfețe și clase pentru o sarcină mică; adăugarea unui produs nou în familie înseamnă modificarea fiecărei fabrici.