Middle
Aké vzory návrhu ste použili okrem Singleton?
sobes.tech AI
Odpoveď od AI
- Factory Method. Používal som ho na vytváranie objektov bez explicitného určenia konkrétneho typu triedy. Je užitočný, keď logika vytvárania objektu závisí od podtried.
- Abstract Factory. Používal som ho na vytváranie rodín súvisiacich alebo závislých objektov, poskytujúc rozhranie na to, ale neuvádzajúc konkrétne triedy.
- Builder. Používal som ho na krokové vytváranie zložitých objektov, kde poradie a kombinácia krokov môžu variť. Umožňuje vyhnúť sa "teleskopickému konštruktoru".
- Observer. Implementoval som ho na vytváranie závislostí "jeden ku mnohým" medzi objektmi, kde zmena stavu jedného objektu automaticky upozorňuje všetky závislé objekty.
- Strategy. Používal som ho na definovanie rodiny algoritmov, ich enkapsuláciu a zabezpečenie ich vzájomnej zameniteľnosti. Umožňuje výber algoritmu počas behu.
- Decorator. Používal som ho na dynamické pridávanie nových povinností objektom bez zmeny ich štruktúry.
- Proxy. Používal som ho v prípadoch, keď je potrebné kontrolovať prístup k objektu, napríklad pre lenivé načítanie alebo zabezpečenie vzdialeného prístupu.
- Template Method. Používal som ho na definovanie kostry algoritmu v nadtriede, umožňujúc podtriedam prepísať určité kroky algoritmu bez zmeny hlavnej štruktúry.
- Adapter. Používal som ho na prevod rozhrania jednej triedy na rozhranie, očakávané klientmi. Umožňuje pracovať s triedami s nesúladnými rozhraniami.
- Command. Používal som ho na enkapsuláciu požiadavky vo forme objektu, čo umožňuje parametrizovať klientov s rôznymi požiadavkami, umiestňovať požiadavky do fronty alebo viesť log operácií, a tiež podporovať vrátenie operácií späť.
Príklad implementácie Factory Method:
// Rozhranie produktu
interface Product {
void doSomething();
}
// Konkrétne produkty
class ConcreteProductA implements Product {
@Override
public void doSomething() {
System.out.println("Robí niečo v Product A");
}
}
class ConcreteProductB implements Product {
@Override
public void doSomething() {
System.out.println("Robí niečo v Product B");
}
}
// Rozhranie továrne
abstract class Creator {
public abstract Product factoryMethod();
public void someOperation() {
Product product = factoryMethod();
product.doSomething();
}
}
// Konkrétne továrne
class ConcreteCreatorA extends Creator {
@Override
public Product factoryMethod() {
return new ConcreteProductA();
}
}
class ConcreteCreatorB extends Creator {
@Override
public Product factoryMethod() {
return new ConcreteProductB();
}
}