Middle
Jaké návrhové vzory jste použili kromě Singletonu?
sobes.tech AI
Odpověď od AI
- Factory Method. Používal jsem ho k vytváření objektů bez explicitního určení konkrétního typu třídy. Je užitečný, když logika tvorby objektu závisí na podtřídách.
- Abstract Factory. Používal jsem ho k vytváření rodin souvisejících nebo závislých objektů, poskytujíc rozhraní pro to, ale neuvádějíc konkrétní třídy.
- Builder. Používal jsem ho k krokovému vytváření složitých objektů, kde se může lišit pořadí a kombinace kroků. Umožňuje se vyhnout "teleskopickému konstruktoru".
- Observer. Implementoval jsem ho pro vytváření závislostí "jeden ku mnoha" mezi objekty, kde změna stavu jednoho objektu automaticky upozorňuje všechny závislé objekty.
- Strategy. Používal jsem ho k definování rodiny algoritmů, jejich enkapsulaci a zajištění jejich vzájemné zaměnitelnosti. Umožňuje vybírat algoritmus za běhu.
- Decorator. Používal jsem ho k dynamickému přidávání nových povinností objektům bez změny jejich struktury.
- Proxy. Používal jsem ho v případech, kdy je třeba kontrolovat přístup k objektu, například pro lenivé načítání nebo zajištění vzdáleného přístupu.
- Template Method. Používal jsem ho k definování kostry algoritmu v nadtřídě, umožňující podtřídám přepsat určité kroky algoritmu bez změny hlavní struktury.
- Adapter. Používal jsem ho k převodu rozhraní jedné třídy na rozhraní očekávané klienty. Umožňuje pracovat s třídami s neslučitelnými rozhraními.
- Command. Používal jsem ho k enkapsulaci požadavku ve formě objektu, což umožňuje parametrizovat klienty s různými požadavky, umisťovat požadavky do fronty nebo vést log operací, a také podporovat vrácení operací zpět.
Příklad implementace Factory Method:
// Rozhraní produktu
interface Product {
void doSomething();
}
// Konkrétní produkty
class ConcreteProductA implements Product {
@Override
public void doSomething() {
System.out.println("Dělá něco v Product A");
}
}
class ConcreteProductB implements Product {
@Override
public void doSomething() {
System.out.println("Dělá něco v Product B");
}
}
// Rozhraní továrny
abstract class Creator {
public abstract Product factoryMethod();
public void someOperation() {
Product product = factoryMethod();
product.doSomething();
}
}
// Konkrétní továrny
class ConcreteCreatorA extends Creator {
@Override
public Product factoryMethod() {
return new ConcreteProductA();
}
}
class ConcreteCreatorB extends Creator {
@Override
public Product factoryMethod() {
return new ConcreteProductB();
}
}