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();
}
}