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: За определяне на скелета на алгоритъма в операцията, като се отлага дефиницията на някои стъпки към подкласовете. Използваше се за стандартизиране на процеса на обработка на заявки.