Назад к вопросам
Middle
69
questionbank
Какие паттерны проектирования, помимо Singleton, вы использовали?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
- Factory Method. Использовал для создания объектов без явного указания конкретного типа класса. Удобно, когда логика создания объекта зависит от подклассов.
- Abstract Factory. Применял для создания семейств связанных или зависимых объектов, предоставляя интерфейс для этого, но не указывая конкретные классы.
- Builder. Использовал для пошагового создания сложных объектов, где порядок и комбинация шагов могут варьироваться. Позволяет избежать "телескопического конструктора".
- Observer. Реализовывал для создания зависимостей "один ко многим" между объектами, где изменение состояния одного объекта автоматически уведомляет всех зависимых объектов.
- Strategy. Применял для определения семейства алгоритмов, инкапсулирования каждого из них и обеспечения их взаимозаменяемости. Позволяет выбирать алгоритм во время выполнения.
- Decorator. Использовал для динамического добавления новых обязанностей объектам без изменения их структуры.
- Proxy. Применял в случаях, когда нужно контролировать доступ к объекту, например, для ленивой загрузки или обеспечения удаленного доступа.
- Template Method. Использовал для определения скелета алгоритма в суперклассе, позволяя подклассам переопределять определенные шаги алгоритма без изменения основной структуры.
- Adapter. Применял для преобразования интерфейса одного класса в интерфейс, ожидаемый клиентами. Позволяет работать классам с несовместимыми интерфейсами.
- Command. Использовал для инкапсуляции запроса в виде объекта, позволяя параметризовать клиентов с различными запросами, ставить запросы в очередь или вести лог операций, а также поддерживать отмену операций.
Пример реализации Factory Method:
// Интерфейс продукта
interface Product {
void doSomething();
}
// Конкретные продукты
class ConcreteProductA implements Product {
@Override
public void doSomething() {
System.out.println("Делает что-то в Product A");
}
}
class ConcreteProductB implements Product {
@Override
public void doSomething() {
System.out.println("Делает что-то в Product B");
}
}
// Интерфейс фабрики
abstract class Creator {
public abstract Product factoryMethod();
public void someOperation() {
Product product = factoryMethod();
product.doSomething();
}
}
// Конкретные фабрики
class ConcreteCreatorA extends Creator {
@Override
public Product factoryMethod() {
return new ConcreteProductA();
}
}
class ConcreteCreatorB extends Creator {
@Override
public Product factoryMethod() {
return new ConcreteProductB();
}
}