Sobes.tech
Middle

Milyen tervezési mintákat használtál a Singleton mellett?

sobes.tech MI

Válasz az MI-től

  • Gyármetódus. Objektumokat hoz létre anélkül, hogy kifejezetten megadná a konkrét osztály típusát. Hasznos, amikor az objektum létrehozásának logikája az alosztályoktól függ.
  • Absztrakt Gyár. Családok kapcsolódó vagy függő objektumokat hoz létre, interfészt biztosítva ehhez, de nem adva meg konkrét osztályokat.
  • Builder. Lépésről lépésre összetett objektumokat hoz létre, ahol a lépések sorrendje és kombinációja változhat. Elkerüli a "teleszkópos konstruktor" problémát.
  • Megfigyelő (Observer). Függőségeket hoz létre "egy a sokhoz" típusban az objektumok között, ahol egy objektum állapotának változása automatikusan értesíti az összes függő objektumot.
  • Stratégia (Strategy). Algoritmus családokat határoz meg, mindegyiket inkapszulálja és biztosítja azok csereszabatosságát. Lehetővé teszi az algoritmus futás közbeni kiválasztását.
  • Díszítő (Decorator). Dinamikusan új felelősségeket ad hozzá az objektumokhoz anélkül, hogy megváltoztatná azok szerkezetét.
  • Proxy. Akkor használják, amikor kontrollálni kell az objektumhoz való hozzáférést, például késleltetett betöltés vagy távoli hozzáférés esetén.
  • Sablon módszer (Template Method). Az algoritmus vázát határozza meg a szuperosztályban, lehetővé téve az alosztályok számára, hogy bizonyos lépéseket felülírjanak anélkül, hogy megváltoztatnák az alapstruktúrát.
  • Adapter. Átalakítja egy osztály interfészét a kliens által elvárt interfésszé. Lehetővé teszi inkompatibilis interfészekkel rendelkező osztályok együttműködését.
  • Parancs (Command). Egy kérés objektummá való inkapszulálására szolgál, lehetővé téve a kliensek paraméterezését különböző kérésekkel, kérés sorba helyezését vagy műveletek naplózását, valamint az műveletek visszavonását.

Factory Method példája:

// Termék interfész
interface Product {
    void doSomething();
}

// Konkrét termékek
class ConcreteProductA implements Product {
    @Override
    public void doSomething() {
        System.out.println("Valamit csinál a Product A");
    }
}

class ConcreteProductB implements Product {
    @Override
    public void doSomething() {
        System.out.println("Valamit csinál a Product B");
    }
}

// Gyártó interfész
abstract class Creator {
    public abstract Product factoryMethod();

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

// Konkrét gyártók
class ConcreteCreatorA extends Creator {
    @Override
    public Product factoryMethod() {
        return new ConcreteProductA();
    }
}

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