Sobes.tech
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.