Middle
Koje obrasce dizajna, pored Singleton, ste koristili?
sobes.tech АИ
Одговор од АИ
- Factory Method. Koristio sam ga za kreiranje objekata bez eksplicitnog navođenja konkretnog tipa klase. Koristan je kada logika kreiranja objekta zavisi od podklasa.
- Abstract Factory. Koristio sam ga za kreiranje porodica povezanih ili zavisnih objekata, pružajući interfejs za to, ali ne navodeći konkretne klase.
- Builder. Koristio sam ga za korak-po-korak kreiranje složenih objekata, gde redosled i kombinacija koraka mogu varirati. Omogućava izbegavanje "teleskopskog konstruktora".
- Observer. Implementirao sam ga za kreiranje zavisnosti "jedan prema mnogima" između objekata, gde promena stanja jednog objekta automatski obaveštava sve zavisne objekte.
- Strategy. Koristio sam ga za definisanje porodice algoritama, njihovu enkapsulaciju i obezbeđivanje njihove međusobne zamenljivosti. Omogućava izbor algoritma tokom izvršavanja.
- Decorator. Koristio sam ga za dinamičko dodavanje novih obaveza objektima bez promene njihove strukture.
- Proxy. Koristio sam ga u slučajevima kada je potrebno kontrolisati pristup objektu, na primer za lenjo učitavanje ili obezbeđivanje udaljenog pristupa.
- Template Method. Koristio sam ga za definisanje kostura algoritma u superklasi, omogućavajući podklasama da prepišu određene korake algoritma bez promene osnovne strukture.
- Adapter. Koristio sam ga za pretvaranje interfejsa jedne klase u interfejs koji očekuju klijenti. Omogućava rad sa klasama sa nespojivim interfejsima.
- Command. Koristio sam ga za enkapsulaciju zahteva u obliku objekta, omogućavajući parametrizaciju klijenata sa različitim zahtevima, stavljanje zahteva u red ili vođenje loga operacija, kao i podršku za poništavanje operacija.
Primer implementacije Factory Method:
// Interfejs proizvoda
interface Product {
void doSomething();
}
// Konkreti proizvodi
class ConcreteProductA implements Product {
@Override
public void doSomething() {
System.out.println("Radi nešto u Product A");
}
}
class ConcreteProductB implements Product {
@Override
public void doSomething() {
System.out.println("Radi nešto u Product B");
}
}
// Interfejs fabrike
abstract class Creator {
public abstract Product factoryMethod();
public void someOperation() {
Product product = factoryMethod();
product.doSomething();
}
}
// Konkrete fabrike
class ConcreteCreatorA extends Creator {
@Override
public Product factoryMethod() {
return new ConcreteProductA();
}
}
class ConcreteCreatorB extends Creator {
@Override
public Product factoryMethod() {
return new ConcreteProductB();
}
}