Menu
Coddy logo textTech

Введение в паттерны проектирования

Часть раздела Объектно-ориентированное программирование путешествия по PHP на Coddy — урок 70 из 91.

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

Представьте себе паттерны проектирования как кулинарные рецепты. Подобно тому, как шеф-повар следует рецепту для создания блюда, доведенного до совершенства со временем, разработчики используют паттерны проектирования для структурирования своего кода способами, которые были протестированы и усовершенствованы бесчисленным количеством программистов до них.

Паттерны проектирования обычно группируются в три категории:

Категория Назначение Примеры
Порождающие Как создаются объекты Singleton, Factory
Структурные Как объекты компонуются Adapter, Decorator
Поведенческие Как объекты взаимодействуют Observer, Strategy

На самом деле вы использовали паттерны на протяжении всего этого курса, даже не осознавая этого. Когда вы создавали абстрактные классы с методами, которые должны реализовывать дочерние классы, вы применяли одну из форм паттерна Template Method. Когда вы использовали интерфейсы для определения контрактов, вы подготавливали почву для паттерна Strategy.

Изучение паттернов проектирования дает вам общий язык с другими разработчиками. Вместо того чтобы подробно объяснять сложную структуру, вы можете просто сказать: «Я использовал здесь паттерн Factory», и опытные разработчики сразу поймут ваш подход. В следующих уроках мы реализуем несколько основных паттернов на PHP.

challenge icon

Задание

Легко

Давайте создадим простую систему форматирования сообщений, которая демонстрирует, как паттерны проектирования помогают организовать код. Вы определите, к какой категории паттернов относится каждый компонент, и увидите, как различные части системы работают вместе.

Вы организуете свой код в трех файлах:

  • MessageFormatter.php — Создайте интерфейс с именем MessageFormatter, который определяет контракт для форматирования сообщений. Он должен иметь один метод format(string $message): string. Это представляет категорию behavioral (поведенческие) — она определяет, как объекты взаимодействуют и обрабатывают данные.
  • Formatters.php — Подключите файл MessageFormatter и создайте два класса, реализующих этот интерфейс:
    • UppercaseFormatter — его метод format() возвращает сообщение, преобразованное в верхний регистр.
    • BracketFormatter — его метод format() заключает сообщение в квадратные скобки, например [message].
  • main.php — Подключите файл Formatters. Вы получите два входных значения: строку сообщения и тип форматировщика ("upper" или "bracket").

    Создайте функцию с именем processMessage, которая принимает MessageFormatter и строку сообщения, а затем возвращает отформатированный результат. Этой функции не нужно знать, какой именно форматировщик она получает — она просто вызывает format() для любого переданного объекта.

    На основе входного типа форматировщика создайте соответствующий объект форматировщика. Передайте его в функцию processMessage вместе с сообщением и выведите результат.

    На новой строке выведите, какую категорию паттернов представляет эта структура. Поскольку мы определяем взаимозаменяемое поведение через интерфейс, выведите: Pattern category: Behavioral

Этот челлендж показывает, как интерфейсы позволяют менять реализации, не изменяя код, который их использует — это основа для таких паттернов, как Стратегия (Strategy), которые вы изучите в следующих уроках.

Шпаргалка

Паттерны проектирования — это проверенные решения распространенных проблем программирования, которые предоставляют шаблоны для эффективного структурирования кода.

Паттерны проектирования делятся на три категории:

Категория Назначение Примеры
Порождающие Как создаются объекты Singleton, Factory
Структурные Как компонуются объекты Adapter, Decorator
Поведенческие Как объекты взаимодействуют Observer, Strategy

Паттерны проектирования обеспечивают общий словарь для разработчиков, упрощая обсуждение сложных архитектурных решений.

Попробуйте сами

<?php
require_once 'Formatters.php';

// Чтение входных данных
$message = trim(fgets(STDIN));
$formatterType = trim(fgets(STDIN));

// TODO: Создайте функцию с именем processMessage, которая принимает MessageFormatter
// и строку сообщения, а затем возвращает отформатированный результат


// TODO: На основе $formatterType ("upper" или "bracket") создайте соответствующий форматировщик


// TODO: Вызовите processMessage с форматировщиком и сообщением, затем выведите результат


// TODO: Выведите категорию паттерна на новой строке
// Формат: "Pattern category: Behavioral"

?>
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование