Sobes.tech
Middle+

Jaké úkoly jste řešili pomocí návrhových vzorů?

sobes.tech AI

Odpověď od AI

Používám různé vzory ke zlepšení struktury a udržovatelnosti kódu:

Vytvářející:

  • Singleton: Pro vytvoření jediného instance objektu, například správce konfigurace nebo pool připojení k databázi.
    public final class ConfigManager {
        private static ConfigManager instance;
        private ConfigManager() {} // Soukromý konstruktor
        public static synchronized ConfigManager getInstance() {
            if (instance == null) {
                instance = new ConfigManager();
            }
            return instance;
        }
    }
    
  • Factory Method: Pro vytváření objektů s určitými vlastnostmi bez explicitního určení konkrétních tříd. Používalo se při práci s různými typy parserů souborů.
  • Abstract Factory: Pro vytváření rodin souvisejících nebo závislých objektů bez určení jejich konkrétních tříd. Používalo se při práci s různými typy zdrojů dat (například souborový systém, databáze) a odpovídajícími objekty.

Strukturální:

  • Adapter: Pro přizpůsobení rozhraní jedné třídy k jiné, kterou očekává klient. Používalo se pro integraci třetích knihoven s nekompatibilními rozhraními.
    public interface Target {
        void request();
    }
    
    public class Adaptee {
        public void specificRequest() {
            System.out.println("Specifická žádost Adaptee");
        }
    }
    
    public class Adapter implements Target {
        private Adaptee adaptee;
    
        public Adapter(Adaptee adaptee) {
            this.adaptee = adaptee;
        }
    
        @Override
        public void request() {
            adaptee.specificRequest();
        }
    }
    
  • Decorator: Pro dynamické přidávání nových povinností objektům bez změny jejich struktury. Používalo se pro přidání funkčnosti logování nebo cache k existujícím objektům.
  • Composite: Pro skládání objektů do stromových struktur pro reprezentaci hierarchií "část-celek". Používá se při práci s prvky uživatelského rozhraní nebo strukturou souborů.

Behaviorální:

  • Observer: Pro definování závislosti "jeden-k-mnoha" mezi objekty tak, že při změně stavu jednoho jsou všechny závislé na něm upozorněny a automaticky aktualizovány. Používalo se pro implementaci systému oznámení o událostech.
    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: Určení rodiny algoritmů, jejich kapsulace a zajištění jejich vzájemné výměnnosti. Používalo se pro výběr různých strategií zpracování dat v závislosti na kontextu.
  • Template Method: Pro stanovení kostry algoritmu v operaci, odkládání definice některých kroků na podtřídy. Používalo se pro standardizaci procesu zpracování požadavků.