Sobes.tech
Middle

Milliseid disainimustreid, välja arvatud Singleton, olete kasutanud?

sobes.tech AI

Vastus AI-lt

  • Factory Method. Kasutasin seda objektide loomisel ilma otseselt konkreetse klassi tüüpi määramata. Kasulik, kui objekti loomise loogika sõltub alamklassidest.
  • Abstract Factory. Kasutasin seda seotud või sõltuvate objektide perekondade loomisel, pakkudes selle jaoks liidest, kuid mitte määrates konkreetseid klasse.
  • Builder. Kasutasin seda keeruliste objektide samm-sammult loomisel, kus sammude järjekord ja kombinatsioonid võivad varieeruda. See aitab vältida "teleskoopset konstruktorit".
  • Observer. Olen seda rakendanud, et luua sõltuvusi "üks mitme vahel" objektide vahel, kus ühe objekti oleku muutmine teavitab automaatselt kõiki sõltuvaid objekte.
  • Strategy. Kasutasin seda algoritmide perekonna määratlemiseks, nende kapseldamiseks ja nende vahetatavuse tagamiseks. See võimaldab valida algoritmi jooksvalt.
  • Decorator. Kasutasin seda, et dünaamiliselt lisada uusi kohustusi objektidele ilma nende struktuuri muutmata.
  • Proxy. Kasutasin seda olukordades, kus on vaja kontrollida juurdepääsu objekti, näiteks laiska laadimise või kaugjuurdepääsu tagamiseks.
  • Template Method. Kasutasin seda algoritmi skeleti määratlemiseks superklassis, võimaldades alamklassidel üle kirjutada teatud samme ilma põhistruktuuri muutmata.
  • Adapter. Kasutasin seda, et teisendada ühe klassi liides klientide ootuspäraseks. See võimaldab töötada mittesobivate liidestega klassidega.
  • Command. Kasutasin seda päringu kapseldamiseks objektina, võimaldades klientide parametriseerimist erinevate päringutega, päringute järjekorda panemist või operatsioonide logi pidamist ning tühistamise toetust.

Näide Factory Method'i rakendamisest:

// Toote liides
interface Product {
    void doSomething();
}

// Konkreetsete toodete näited
class ConcreteProductA implements Product {
    @Override
    public void doSomething() {
        System.out.println("Teeb midagi Product A-s");
    }
}

class ConcreteProductB implements Product {
    @Override
    public void doSomething() {
        System.out.println("Teeb midagi Product B-s");
    }
}

// Tootja liides
abstract class Creator {
    public abstract Product factoryMethod();

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

// Konkreetsete tootjate näited
class ConcreteCreatorA extends Creator {
    @Override
    public Product factoryMethod() {
        return new ConcreteProductA();
    }
}

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