Middle+
Aké úlohy ste riešili pomocou návrhových vzorov?
sobes.tech AI
Odpoveď od AI
Použil som rôzne vzory na zlepšenie štruktúry a udržiavania kódu:
Tvorivé:
- Singleton: Na vytvorenie jediného inštancie objektov, napríklad správcu konfigurácie alebo pool pripojení k databáze.
public final class ConfigManager { private static ConfigManager instance; private ConfigManager() {} // Súkromný konštruktor public static synchronized ConfigManager getInstance() { if (instance == null) { instance = new ConfigManager(); } return instance; } } - Factory Method: Na vytváranie objektov s určitými vlastnosťami bez explicitného určenia konkrétnych tried. Používalo sa pri práci s rôznymi typmi parserov súborov.
- Abstract Factory: Na vytváranie rodín súvisiacich alebo závislých objektov bez určenia ich konkrétnych tried. Používalo sa pri práci s rôznymi typmi zdrojov dát (napríklad súborový systém, databáza) a zodpovedajúcimi objektmi.
Štrukturálne:
- Adapter: Na prispôsobenie rozhrania jednej triedy inej, ktorú očakáva klient. Používalo sa na integráciu externých knižníc s nekompatibilnými rozhraniami.
public interface Target { void request(); } public class Adaptee { public void specificRequest() { System.out.println("Špecifická požiadavka Adaptee"); } } public class Adapter implements Target { private Adaptee adaptee; public Adapter(Adaptee adaptee) { this.adaptee = adaptee; } @Override public void request() { adaptee.specificRequest(); } } - Decorator: Na dynamické pridanie nových povinností objektom bez zmeny ich štruktúry. Používalo sa na pridanie funkčnosti na zaznamenávanie alebo cache k existujúcim objektom.
- Composite: Na skladanie objektov do stromových štruktúr na reprezentáciu hierarchií "časť-celek". Používalo sa pri práci s prvkami používateľského rozhrania alebo štruktúrou súborov.
Správanie:
- Observer: Na definovanie závislosti "jeden-pre-viac" medzi objektmi tak, že pri zmene stavu jedného sú všetky závislé od neho upozornené a automaticky aktualizované. Používalo sa na implementáciu systému oznámení o udalostiach.
import java.util.ArrayList; import java.util.List; public class Subject { private List<Observer> observers = new ArrayList<>(); private int state; public void attach(Observer observer) { observers.add(observer); } public void setState(int state) { this.state = state; notifyObservers(); } private void notifyObservers() { for (Observer observer : observers) { observer.update(); } } } public interface Observer { void update(); } - Strategy: Na definovanie rodiny algoritmov, ich kapsulovanie a zabezpečenie ich vzájomnej výmeniteľnosti. Používalo sa na výber rôznych stratégií spracovania dát v závislosti od kontextu.
- Template Method: Na stanovenie kostry algoritmu v operácii, odkladanie definície niektorých krokov na podtriedy. Používalo sa na štandardizáciu procesu spracovania požiadaviek.