Sobes.tech
Middle+

Какви задачи решихте с помощта на дизайн патърни?

sobes.tech AI

Отговор от AI

Използвах различни модели за подобряване на структурата и поддържаността на кода:

Създаващи:

  • Singleton: За създаване на единствен екземпляр на обекти, например мениджър на конфигурации или пул за връзки с базата данни.
    public final class ConfigManager {
        private static ConfigManager instance;
        private ConfigManager() {} // Частен конструктор
        public static synchronized ConfigManager getInstance() {
            if (instance == null) {
                instance = new ConfigManager();
            }
            return instance;
        }
    }
    
  • Factory Method: За създаване на обекти с определени свойства без явното указване на конкретни класове. Използваше се при работа с различни типове парсъри за файлове.
  • Abstract Factory: За създаване на семейства от свързани или зависими обекти без да се указват конкретните им класове. Използваше се при работа с различни типове източници на данни (например файловата система, базата данни) и съответните им обекти.

Структурни:

  • Adapter: За адаптиране на интерфейса на един клас към друг, който клиентът очаква. Използваше се за интеграция на външни библиотеки с несъвместими интерфейси.
    public interface Target {
        void request();
    }
    
    public class Adaptee {
        public void specificRequest() {
            System.out.println("Специфична заявка на Adaptee");
        }
    }
    
    public class Adapter implements Target {
        private Adaptee adaptee;
    
        public Adapter(Adaptee adaptee) {
            this.adaptee = adaptee;
        }
    
        @Override
        public void request() {
            adaptee.specificRequest();
        }
    }
    
  • Decorator: За динамично добавяне на нови отговорности към обекти без да се променя тяхната структура. Използваше се за добавяне на функционалност за логване или кеширане към съществуващи обекти.
  • Composite: За съставяне на обекти в дървовидни структури за представяне иерархии "част-цяло". Използваше се при работа с елементи на потребителския интерфейс или структурата на файловете.

Поведенчески:

  • Observer: За определяне на зависимост "един-към-много" между обекти, така че при промяна на състоянието на един обект всички зависими от него да бъдат уведомени и автоматично актуализирани. Използваше се за реализиране на система за уведомяване за събития.
    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: За определяне на семейство алгоритми, инкапсулиране на всеки от тях и осигуряване на взаимозаменяемост. Използваше се за избор на различни стратегии за обработка на данни в зависимост от контекста.
  • Template Method: За определяне на скелета на алгоритъма в операцията, като се отлага дефиницията на някои стъпки към подкласовете. Използваше се за стандартизиране на процеса на обработка на заявки.