Treci la conținutul principal

Ce este

Șablonul Abstract Factory creează familii întregi de obiecte înrudite, care merg împreună. Acolo unde o metodă-fabrică (Factory Method) creează un singur produs, o fabrică abstractă creează un set care se potrivește — ș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 unitar. Schimbarea întregului aspect înseamnă un singur argument — iar amestecarea temelor este imposibilă prin însăși construcția codului.

O singură fabrică, o singură familie unitară

Tema deschisă produce doar piese deschise, tema închisă doar piese închise. renderScreen nu se schimbă niciodată.

Prompt
Scrie un program Go cu o fabrică abstractă de interfață grafică: interfețele Button și Label, o interfață UIFactory cu NewButton și NewLabel, plus fabricile LightTheme și DarkTheme care produc piese deschise sau închise care se potrivesc între ele. O funcție renderScreen desenează un ecran cu orice fabrică; desenează un ecran deschis și unul închis.
Ieșire: program Go și rezultatul capturat

Când să îl folosești

Folosește-l atunci când mai multe obiecte trebuie să rămână consecvente între ele — teme, seturi de componente grafice 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: consecvența familiei este garantată; familii întregi se schimbă cu o singură valoare; codul apelant depinde doar de interfețe.

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