Sobes.tech
Junior — Middle

Explicați principalele diferențe dintre modelele 'Metoda fabricii' și 'Fabrica abstractă'.

sobes.tech AI

Răspuns de la AI

Modelul Metoda Fabrica (Factory Method) definește o interfață pentru crearea unui obiect, dar permite subclasei să decidă ce clasă să instanțieze. Cu alte cuvinte, crearea unui obiect concret este delegată subclasei. Este folosit de obicei atunci când există un produs și mai multe variante ale implementării sale.

Fabrica Abstractă (Abstract Factory) oferă o interfață pentru crearea familiilor de obiecte legate sau dependente fără a specifica clasele lor concrete. Este un pattern de nivel superior, care combină mai multe metode de fabrică pentru a crea diferite, dar legate, obiecte.

Diferențe principale:

  • Focus: Metoda Fabrica creează un singur produs, Fabrica Abstractă — o familie de produse.
  • Structură: Metoda Fabrica este de obicei implementată prin moștenire și suprascrierea metodei de creare, Fabrica Abstractă — prin compoziție și un set de interfețe.
  • Utilizare: Metoda Fabrica este potrivită atunci când trebuie create obiecte de același tip cu variații, Fabrica Abstractă — când trebuie create obiecte legate de tipuri diferite care trebuie să funcționeze împreună.

Exemplu în Dart (Flutter) pentru metoda fabricii:

abstract class Button {
  void render();
}

class AndroidButton implements Button {
  @override
  void render() => print('Buton Android');
}

class IOSButton implements Button {
  @override
  void render() => print('Buton iOS');
}

abstract class Dialog {
  Button createButton();
  void render() {
    var button = createButton();
    button.render();
  }
}

class AndroidDialog extends Dialog {
  @override
  Button createButton() => AndroidButton();
}

class IOSDialog extends Dialog {
  @override
  Button createButton() => IOSButton();
}

Aici, Dialog este metoda fabricii care creează butoane diferite în funcție de platformă.

Fabrica abstractă va include crearea mai multor produse legate, de exemplu, butoane și casete de selectare, care trebuie să fie compatibile între ele.