Treci la conținutul principal

Ce este

Șablonul Fabrica abstractă (Abstract Factory) creează familii întregi de obiecte înrudite, care trebuie folosite împreună. Acolo unde o metodă fabrică produce un singur produs, o fabrică abstractă produce un set potrivit — și garantează că piesele nu sunt niciodată amestecate.

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


Exemplu: o fabrică de teme

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

O fabrică, o familie consecventă

Tema deschisă produce doar piese deschise, tema întunecată doar piese întunecate. render_screen nu se schimbă niciodată.

Prompt
Scrie un program Python cu o fabrică abstractă de interfață grafică: protocoalele Button și Label, un protocol UIFactory cu new_button și new_label, și fabricile LightTheme și DarkTheme care produc piese potrivite, deschise sau întunecate. O funcție render_screen afișează un ecran folosind orice fabrică; afișează un ecran deschis și unul întunecat.
Ieșire: program Python complet

Când să-l folosești

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

Renunță la el când produsele nu trebuie să se potrivească. 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 protocoale.

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