Что такое паттерны проектирования? Назовите 3–5 примеров
Подробный ответ
Что такое паттерн проектирования
Паттерн описывает типовую проблему, контекст её появления и общую идею решения. Он не должен применяться автоматически: паттерн полезен, если действительно упрощает код и соответствует задаче.
Singleton
Singleton гарантирует, что у класса существует один экземпляр, и предоставляет к нему общую точку доступа. Его могут применять для конфигурации или общего клиента, но использовать нужно осторожно: глобальное состояние усложняет тестирование и создаёт скрытые зависимости.
Factory
Factory инкапсулирует создание объектов. Клиентский код просит фабрику создать объект нужного типа и не зависит от деталей конкретного конструктора.
def create_payment_gateway(provider: str):
if provider == 'stripe':
return StripeGateway()
if provider == 'paypal':
return PayPalGateway()
raise ValueError('Unsupported provider')Strategy
Strategy позволяет выбирать взаимозаменяемый алгоритм во время работы программы. Например, расчёт стоимости доставки может использовать разные стратегии для курьера, самовывоза и международной доставки.
Observer
Observer описывает механизм подписки на события. Когда состояние объекта изменяется, он уведомляет подписчиков. Примеры: доменные события, уведомления пользователей, обработка изменений в UI.
Adapter
Adapter позволяет совместить несовместимые интерфейсы. Например, он может привести API внешнего платёжного провайдера к интерфейсу PaymentGateway, который использует приложение.
Repository
Repository изолирует работу с хранилищем данных от бизнес-логики. Он может скрывать ORM, SQL-запросы или детали внешнего источника данных за понятным интерфейсом.
Как ответить на собеседовании
Паттерны проектирования — это проверенные схемы решения повторяющихся архитектурных задач. Например, Factory инкапсулирует создание объектов, Strategy позволяет менять алгоритм, Observer организует подписку на события, Adapter согласует несовместимые интерфейсы, а Repository изолирует доступ к данным. Паттерн выбирают по задаче, а не ради самого паттерна.
Оцени свой прогресс