Шаблоны проектирования

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

Выделяют три группы шаблонов:
  1. Порождающие (Creational) – описывают создание объектов.
  2. Структурные (Structural) – описывают структурную организацию связей между объектами.
  3. Поведенческие (Behavioral) – описывают поведение объектов.

Ниже перечисляются конкретные шаблоны и примеры их реализации на языке PHP.

Порождающие шаблоны

Порождающие паттерны абстрагируют создание объектов и полезны в случаях, когда создание объектов с помощью конструктора становится обременительным.
  • ОДИНОЧКА (SINGLETON)
    Используется в случаях, где требуется только один объект класса и нужно иметь общую точку доступа к этому объекту.
    Пример задачи: реализация работы с БД. Создаётся единственный объект для подключения к базе и выполнения запросов, причём доступ к объекту должен иметься из любого места кода.
  • ФАБРИЧНЫЙ МЕТОД (FACTORY METHOD)
    Определяет в родительском классе общую схему создания объекта и даёт дочерним классам  право самостоятельно решать, объект какого класса им нужно создавать. Тем самым, в родительском классе задаётся абстрактная логика, а в дочерних классах реализуется конкретная логика.
    Пример задачи: запись логов на разные носители (вывод на экран, запись в файл на локальном диске, сохранение в базу данных).
  • АБСТРАКТНАЯ ФАБРИКА (ABSTRACT FACTORY)
    Предоставляет механизм для создания семейств связанных объектов без указания их конкретных классов. Паттерн действует как фабрика фабрик, где главная фабрика создает другие фабрики, которые, в свою очередь, создают конкретные продукты (объекты). Это позволяет в клиентском коде легко переключаться между группами связанных объектов без крупных изменений кода.
    Пример задачи: реализация тем оформления приборной панели электромобиля.
  • СТРОИТЕЛЬ (BUILDER)
    Предлагает схему пошагового создания сложных объектов. С помощью этого паттерна, используя один и тот же конструктивный код, можно создавать объекты разных типов или одного типа, но с разным наполнением.
    Пример задачи: создание запросов к БД, используя конструктор запросов.
  • ПРОТОТИП (PROTOTYPE)
    Представляет механизм для массового создания различных объектов с помощью класса-прототипа и последующего копирования однотипных объектов, вместо их создания с нуля.
    Пример задачи: создание армии юнитов на карте игровой стратегии.