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