Sobes.tech
Middle

Ce modele de proiectare, pe lângă Singleton, ai folosit?

sobes.tech AI

Răspuns de la AI

  • Metoda Fabrica. Folosit pentru a crea obiecte fără a specifica explicit tipul concret al clasei. Este util atunci când logica de creare a obiectului depinde de subclase.
  • Fabrica Abstractă. A fost utilizată pentru crearea familiilor de obiecte legate sau dependente, oferind o interfață pentru aceasta, dar fără a indica clase concrete.
  • Builder. Folosit pentru crearea pas cu pas a obiectelor complexe, unde ordinea și combinația pașilor pot varia. Permite evitarea "constructorului telescopic".
  • Observer. Implementat pentru crearea dependențelor "unu la mulți" între obiecte, unde modificarea stării unui obiect notifică automat toate obiectele dependente.
  • Strategy. A fost aplicat pentru definirea unei familii de algoritmi, încapsularea fiecăruia și asigurarea înlocuibilității lor. Permite alegerea algoritmului în timpul execuției.
  • Decorator. Folosit pentru adăugarea dinamică a responsabilităților noi obiectelor fără a modifica structura lor.
  • Proxy. A fost utilizat în cazurile în care trebuie controlat accesul la un obiect, de exemplu, pentru încărcare leneșă sau acces la distanță.
  • Template Method. Folosit pentru a defini scheletul algoritmului în superclasă, permițând subclasele să redefinească anumite pași ai algoritmului fără a schimba structura principală.
  • Adapter. A fost utilizat pentru transformarea interfeței unei clase în interfața așteptată de clienți. Permite ca clasele cu interfețe incompatibile să lucreze împreună.
  • Command. Folosit pentru încapsularea unei solicitări sub forma unui obiect, permițând parametrizarea clienților cu solicitări diferite, punerea solicitărilor în coadă sau menținerea unui jurnal de operații, precum și suportul pentru anularea operațiilor.

Exemplu de implementare a Factory Method:

// Interfața produsului
interface Product {
    void doSomething();
}

// Produse concrete
class ConcreteProductA implements Product {
    @Override
    public void doSomething() {
        System.out.println("Face ceva în Product A");
    }
}

class ConcreteProductB implements Product {
    @Override
    public void doSomething() {
        System.out.println("Face ceva în Product B");
    }
}

// Interfața fabricii
abstract class Creator {
    public abstract Product factoryMethod();

    public void someOperation() {
        Product product = factoryMethod();
        product.doSomething();
    }
}

// Fabrici concrete
class ConcreteCreatorA extends Creator {
    @Override
    public Product factoryMethod() {
        return new ConcreteProductA();
    }
}

class ConcreteCreatorB extends Creator {
    @Override
    public Product factoryMethod() {
        return new ConcreteProductB();
    }
}