Приведи примеры поведенческих шаблонов проектирования.
Ответ от нейросети
sobes.tech AI
-
Chain of Responsibility (Цепочка обязанностей): Передача запроса по цепочке обработчиков. Каждый обработчик либо обрабатывает запрос, либо передает его следующему. Пример: обработка событий в GUI.
-
Command (Команда): Инкапсуляция запроса в виде объекта, позволяя параметризовать клиента различными запросами, ставить их в очередь или логировать, а также поддерживать отмену операций. Пример: действия в меню текстового редактора.
-
Iterator (Итератор): Предоставление способа последовательного доступа ко всем элементам составного объекта, не раскрывая его внутреннего представления. Пример: перебор элементов коллекции.
// Пример использования Iterator List<String> list = new ArrayList<>(); list.add("A"); list.add("B"); Iterator<String> iterator = list.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } -
Mediator (Посредник): Определение объекта, инкапсулирующего взаимодействие между набором объектов. Посредник способствует слабой связанности, избавляя объекты от необходимости явно ссылаться друг на друга. Пример: взаимодействие UI-компонентов в диалоговом окне.
-
Memento (Хранитель): Без нарушения инкапсуляции фиксация и внешнее сохранение внутреннего состояния объекта, чтобы позднее можно было восстановить этот объект в прежнее состояние. Пример: функция отмены (undo) в приложении.
-
Observer (Наблюдатель): Определение зависимости «один ко многим» между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются и автоматически обновляются. Пример: событийно-ориентированные системы.
// Пример реализации Observer public interface Observer { void update(); } public class Subject { private List<Observer> observers = new ArrayList<>(); public void addObserver(Observer observer) { observers.add(observer); } public void notifyObservers() { for (Observer observer : observers) { observer.update(); } } } -
State (Состояние): Позволяет объекту изменять свое поведение в зависимости от внутреннего состояния. Кажется, будто изменился класс объекта. Пример: различные состояния TCP-соединения.
-
Strategy (Стратегия): Определение семейства алгоритмов, инкапсуляция каждого из них и обеспечение их взаимозаменяемости. Позволяет выбирать алгоритм во время выполнения программы. Пример: различные алгоритмы сортировки.
// Пример использования Strategy interface SortingStrategy { void sort(int[] array); } class BubbleSortStrategy implements SortingStrategy { @Override public void sort(int[] array) { // Реализация пузырьковой сортировки } } class Context { private SortingStrategy strategy; public void setStrategy(SortingStrategy strategy) { this.strategy = strategy; } public void executeSort(int[] array) { strategy.sort(array); } } -
Template Method (Шаблонный метод): Определение скелета алгоритма в суперклассе, позволяя подклассам переопределить определенные шаги алгоритма без изменения его общей структуры. Пример: шаги построения отчета.
// Пример реализации Template Method abstract class AbstractClass { public final void templateMethod() { step1(); step2(); step3(); } abstract void step1(); void step2() { /* Дефолтная реализация */ } abstract void step3(); } class ConcreteClass extends AbstractClass { @Override void step1() { // Специфичная реализация шага 1 } @Override void step3() { // Специфичная реализация шага 3 } } -
Visitor (Посетитель): Представление операции, которую необходимо выполнить над элементами структуры объектов. Visitor позволяет определить новую операцию без изменения классов элементов, над которыми она оперирует. Пример: операции над элементами дерева синтаксического анализа.