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ů.