Пример ответа
1) Короткий ответ
Знаю основные паттерны проектирования, которые делятся на три категории: порождающие, структурные и поведенческие, и применяю их для создания масштабируемого кода.
2) Основные паттерны (список)
Порождающие:
Singleton — гарантирует один экземпляр класса (например, для подключения к БД)
Factory Method — создание объектов через подклассы
Abstract Factory — создание семейств связанных объектов
Builder — пошаговое создание сложных объектов
Структурные:
Adapter — совмещение несовместимых интерфейсов
Decorator — динамическое добавление функциональности
Facade — упрощенный интерфейс к сложной системе
Composite — работа с древовидными структурами
Поведенческие:
Strategy — инкапсуляция алгоритмов
Observer — уведомление об изменениях
Command — инкапсуляция запросов как объектов
5) Пример паттерна Factory Method
php
Copy
Download
interface Notification {
public function send(string $message): void;
}
class EmailNotification implements Notification {
public function send(string $message): void {
echo "Email: $message";
}
}
class SMSNotification implements Notification {
public function send(string $message): void {
echo "SMS: $message";
}
}
abstract class NotificationFactory {
abstract public function createNotification(): Notification;
public function sendAlert(string $message): void {
$notification = $this->createNotification();
$notification->send($message);
}
}
class EmailFactory extends NotificationFactory {
public function createNotification(): Notification {
return new EmailNotification();
}
}
// Использование
$factory = new EmailFactory();
$factory->sendAlert("Ваш заказ готов!");
6) Follow-up вопросы
Когда использовать Abstract Factory вместо Factory Method? → Семейства объектов.
В чем минус Singleton? → Глобальное состояние.
7) Практический совет
Реализуйте паттерн Strategy для системы скидок: создайте интерфейс
DiscountStrategy
с классамиPercentageDiscount
иFixedDiscount
.Найдите в своем коде сложный конструктор и перепишите его используя Builder для улучшения читаемости.