Sobes.tech
Middle

Kokius projektavimo šablonus, išskyrus Singleton, naudojote?

sobes.tech AI

Atsakymas iš AI

  • Factory Method. Naudojau jį objektų kūrimui be aiškaus konkretaus klasės tipo nurodymo. Naudinga, kai objekto kūrimo logika priklauso nuo pogrupių.
  • Abstract Factory. Naudojau jį kuriant susijusių ar priklausomų objektų šeimas, teikiant jiems sąsają, bet ne nurodant konkrečius klases.
  • Builder. Naudojau jį žingsnis po žingsnio sudėtingų objektų kūrimui, kur žingsnių tvarka ir deriniai gali skirtis. Tai padeda išvengti "teleskopinio konstruktoriaus".
  • Observer. Įgyvendinau jį kuriant priklausomybes "vienas prie daugelio" tarp objektų, kur vieno objekto būsenos pasikeitimas automatiškai praneša visus priklausomus objektus.
  • Strategy. Naudojau jį algoritmų šeimų apibrėžimui, jų inkapsuliacijai ir tarpusavio keičiamumui užtikrinti. Tai leidžia pasirinkti algoritmą vykdymo metu.
  • Decorator. Naudojau jį dinamiškai pridedant naujas pareigas objektams be jų struktūros keitimo.
  • Proxy. Naudojau jį, kai reikia kontroliuoti prieigą prie objekto, pavyzdžiui, vėlyvo įkėlimo ar nuotolinės prieigos užtikrinimui.
  • Template Method. Naudojau jį algoritmo skeletui apibrėžti superklase, leidžiant subklasėms perrašyti tam tikrus algoritmo žingsnius be pagrindinės struktūros keitimo.
  • Adapter. Naudojau jį, kad konvertuočiau vieno klases sąsają į sąsają, kurią tikisi klientai. Tai leidžia dirbti su nesuderinamomis sąsajomis.
  • Command. Naudojau jį užklausos inkapsuliacijai kaip objekto, leidžiančio parametrizuoti klientus su skirtingomis užklausomis, eilėje dėti užklausas ar sekti operacijų žurnalą, taip pat palaikyti operacijų atšaukimą.

Pavyzdys Factory Method įgyvendinimo:

// Produkto sąsaja
interface Product {
    void doSomething();
}

// Konkrečios prekės
class ConcreteProductA implements Product {
    @Override
    public void doSomething() {
        System.out.println("Atlieka kažką Product A");
    }
}

class ConcreteProductB implements Product {
    @Override
    public void doSomething() {
        System.out.println("Atlieka kažką Product B");
    }
}

// Gamintojų sąsaja
abstract class Creator {
    public abstract Product factoryMethod();

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

// Konkrečios gamintojai
class ConcreteCreatorA extends Creator {
    @Override
    public Product factoryMethod() {
        return new ConcreteProductA();
    }
}

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