Middle+
84
questionbank
Какие задачи вы решали с использованием паттернов проектирования?
Ответ от нейросети
sobes.tech 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's specific request"); } } 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: Для определения скелета алгоритма в операции, откладывая определение некоторых шагов до подклассов. Применялся для стандартизации процесса обработки запросов.