← Назад к вопросам
Как использование шаблонов применяется в ООП
2.0 Middle🔥 241 комментариев
#SOLID и паттерны проектирования
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
# Шаблоны в ООП
Шаблоны проектирования (design patterns) — это проверенные решения типичных проблем в разработке. Они описывают отношения между классами и объектами и помогают написать масштабируемый, поддерживаемый код.
Три основные группы шаблонов
1. Порождающие (Creational)
Отвечают за создание объектов. Примеры:
- Singleton — гарантирует единственный экземпляр класса
- Factory — создание объектов без указания конкретных классов
- Builder — пошаговое создание сложных объектов
// Builder пример
public class User {
private String name;
private String email;
private int age;
public static class Builder {
private String name;
private String email;
private int age;
public Builder name(String name) {
this.name = name;
return this;
}
public Builder email(String email) {
this.email = email;
return this;
}
public User build() {
User user = new User();
user.name = this.name;
user.email = this.email;
user.age = this.age;
return user;
}
}
}
// Использование
User user = new User.Builder()
.name(\"John\")
.email(\"john@example.com\")
.build();
2. Структурные (Structural)
Определяют отношения между сущностями. Примеры:
- Adapter — совместимость несовместимых интерфейсов
- Decorator — добавление функциональности к объектам динамически
- Facade — упрощение сложного подсистемы
// Decorator пример
public interface Component {
void display();
}
public class SimpleComponent implements Component {
@Override
public void display() {
System.out.println(\"Simple component\");
}
}
public abstract class Decorator implements Component {
protected Component component;
public Decorator(Component component) {
this.component = component;
}
}
public class BorderDecorator extends Decorator {
public BorderDecorator(Component component) {
super(component);
}
@Override
public void display() {
System.out.println(\"*** Border ***\");
component.display();
System.out.println(\"*** Border ***\");
}
}
3. Поведенческие (Behavioral)
Определяют взаимодействие объектов. Примеры:
- Observer — оповещение множества объектов об изменениях
- Strategy — выбор алгоритма во время выполнения
- State — изменение поведения при изменении состояния
// Observer пример
public interface Observer {
void update(String event);
}
public class Subject {
private List<Observer> observers = new ArrayList<>();
public void attach(Observer observer) {
observers.add(observer);
}
public void detach(Observer observer) {
observers.remove(observer);
}
public void notifyObservers(String event) {
for (Observer observer : observers) {
observer.update(event);
}
}
}
Применение в ООП
Преимущества:
- Ускоренная разработка (использование проверенных решений)
- Улучшенная читаемость и поддержка кода
- Снижение связанности между компонентами
- Облегчение расширения функциональности
Когда использовать:
- Когда встречаешься с типичной проблемой
- Когда нужна гибкость в расширении
- Когда требуется слабая связанность
- Когда нужна переиспользуемость кода
Основные принципы:
- DRY (Don't Repeat Yourself)
- SOLID (Single, Open/Closed, Liskov, Interface Segregation, Dependency Inversion)
- Композиция вместо наследования