Menu
Coddy logo textTech

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

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

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

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

Шаблоны проектирования обычно группируются по трём категориям:

Категория Назначение Примеры
Creational How objects создаются Singleton, Factory
Structural How objects составляются Adapter, Decorator
Behavioral How objects communicate Observer, Strategy

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

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

challenge icon

Задание

Легко

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

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

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

    Create функцию с именем processMessage, которая accepts MessageFormatter и строку message, а затем возвращает formatted результат. Эта function не должна знать, какой именно formatter она получает. Она просто вызывает format() у любого переданного object.

    На основе input типа formatter Create appropriate объект formatter. Передайте его в свою function processMessage вместе с message и выведите результат.

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

Этот challenge показывает, как интерфейсы позволяют заменять реализации, не изменяя код, который их использует: это основа для таких patterns, как Strategy, которые вы изучите в следующих уроках.

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

<?php
require_once 'Formatters.php';

// Прочитать ввод
$message = trim(fgets(STDIN));
$formatterType = trim(fgets(STDIN));

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


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


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


// TODO: Print the pattern category on a new line
// Format: "Pattern category: Behavioral"

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

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

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

Потренируйтесь самостоятельно: Онлайн-компилятор PHP