Sobes.tech
Назад к вопросам
Junior — Middle
63

Можешь назвать распространённые паттерны в объектно-ориентированном проектировании?

Компании, где спрашивали
ФинГрад
Бренд Монитор
appfox

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Ожидают, что будут названы базовые порождающие, структурные и поведенческие паттерны и коротко объяснено, зачем они нужны. Важно показать понимание, что паттерны — это не «готовый код», а проверенные способы организовать взаимодействие объектов. Хороший ответ обычно содержит 3–5 примеров и одну-две типичные ситуации применения.

Определение:

Паттерны объектно-ориентированного проектирования — это типовые решения повторяющихся задач при построении программной архитектуры. Они помогают сделать код более гибким, расширяемым и понятным, особенно когда система начинает расти. Обычно паттерны делят на три группы: порождающие, структурные и поведенческие.

Пример использования:

Например, когда нужно создавать объекты без жёсткой привязки к конкретным классам, используют фабрику. Когда нужно добавить объекту новую функциональность без изменения его класса, часто применяют декоратор.

// Пример фабричного метода
public interface INotification
{
    void Send();
}

public class EmailNotification : INotification
{
    public void Send() => Console.WriteLine("Send email");
}

public class SmsNotification : INotification
{
    public void Send() => Console.WriteLine("Send SMS");
}

public static class NotificationFactory
{
    public static INotification Create(string type) =>
        type switch
        {
            "email" => new EmailNotification(),
            "sms" => new SmsNotification(),
            _ => throw new ArgumentException("Unknown notification type")
        };
}

// Использование
var notification = NotificationFactory.Create("email");
notification.Send();

Пояснение кода:

Код показывает простую фабрику, которая скрывает выбор конкретной реализации за единым методом Create. Клиентский код работает через интерфейс INotification и не зависит от конкретного класса EmailNotification или SmsNotification. Это облегчает расширение: чтобы добавить новый тип уведомления, нужно создать новый класс и дописать ветку в фабрике.

Ключевые моменты:

  • Паттерны делят на три основные группы: порождающие, структурные и поведенческие.
  • Самые узнаваемые порождающие паттерны: Factory Method, Abstract Factory, Singleton, Builder, Prototype.
  • Самые распространённые структурные: Adapter, Decorator, Facade, Composite, Proxy.
  • Самые часто встречающиеся поведенческие: Strategy, Observer, Command, State, Iterator, Mediator.
  • Паттерны полезны, когда нужно снизить связность и упростить расширение системы.
  • Важно не применять паттерн «на всякий случай» — он должен решать конкретную архитектурную проблему.