Блог
Паттерны проектирования
Серия статей о классических паттернах проектирования GoF с примерами кода на PHP — от Фабричного метода до Компоновщика.
Порождающие паттерны
- 1
Фабричный метод
Разбираем порождающий паттерн «Фабричный метод»: зачем он нужен, как устроен и как выглядит на практике в PHP.
- 2
Абстрактная фабрика
Разбираем порождающий паттерн «Абстрактная фабрика»: зачем он нужен, чем отличается от Фабричного метода и как выглядит на практике в PHP.
- 3
Строитель
Разбираем порождающий паттерн «Строитель»: как избавиться от телескопических конструкторов и собирать сложные объекты пошагово на PHP.
- 4
Прототип
Разбираем порождающий паттерн «Прототип»: как копировать сложные объекты вместо повторного дорогого создания, на примерах PHP с clone и __clone().
- 5
Одиночка
Разбираем порождающий паттерн «Одиночка»: как гарантировать единственный экземпляр класса на PHP и почему этот паттерн считают спорным.
Структурные паттерны
- 1
Адаптер
Разбираем структурный паттерн «Адаптер»: как подружить несовместимые интерфейсы без изменения существующего кода, на примерах PHP.
- 2
Мост
Разбираем структурный паттерн «Мост»: как развести две независимые иерархии классов через композицию вместо наследования, на примерах PHP.
- 3
Компоновщик
Разбираем структурный паттерн «Компоновщик»: как работать с деревом объектов «часть-целое» через единый интерфейс, на примерах PHP.
- 4
Декоратор
Разбираем структурный паттерн «Декоратор»: как добавлять объекту новые обязанности через цепочку обёрток с общим интерфейсом, не плодя подклассы под каждую комбинацию, на примерах PHP.
- 5
Фасад
Разбираем структурный паттерн «Фасад»: как спрятать сложную подсистему из множества классов за одним простым интерфейсом, на примерах PHP.
- 6
Легковес
Разбираем структурный паттерн «Легковес»: как экономить память на множестве похожих объектов за счёт разделения общего состояния, на примерах PHP.
- 7
Заместитель
Разбираем структурный паттерн «Заместитель» (Proxy): как контролировать доступ к объекту через обёртку с тем же интерфейсом — отложенная инициализация, проверка прав, кэширование — на примерах PHP.
Поведенческие паттерны
- 1
Цепочка обязанностей
Разбираем поведенческий паттерн «Цепочка обязанностей» (Chain of Responsibility): как передать запрос по цепочке обработчиков, пока один из них не возьмёт его на себя, вместо разрастающегося if/elseif — на примерах PHP.
- 2
Команда
Разбираем поведенческий паттерн «Команда» (Command): как превратить запрос в самостоятельный объект с методами execute() и undo(), отвязав отправителя от получателя и получив отмену, очередь и журнал действий бесплатно — на примерах PHP.
- 3
Итератор
Разбираем поведенческий паттерн «Итератор» (Iterator): как обходить коллекцию, не раскрывая её внутреннее устройство, и подключать разные способы обхода без изменения самой коллекции — на примерах PHP.
- 4
Посредник
Разбираем поведенческий паттерн «Посредник» (Mediator): как убрать прямые связи между объектами, знающими друг о друге напрямую, и свести всё взаимодействие через один центральный объект — на примерах PHP.
- 5
Снимок
Разбираем поведенческий паттерн «Снимок» (Memento): как сохранить и восстановить внутреннее состояние объекта, не раскрывая его детали объекту, который хранит историю изменений — на примерах PHP.
- 6
Наблюдатель
Разбираем поведенческий паттерн «Наблюдатель» (Observer): как оповещать неограниченный список подписчиков об изменении объекта, не привязывая его к их конкретным классам — на примерах PHP.
- 7
Состояние
Разбираем поведенческий паттерн «Состояние» (State): как убрать ветвления по статусу объекта, вынеся поведение каждого статуса в отдельный класс, который сам решает, куда перейти дальше — на примерах PHP.
- 8
Стратегия
Разбираем поведенческий паттерн «Стратегия» (Strategy): как вынести взаимозаменяемые алгоритмы в отдельные классы с общим интерфейсом и подставлять нужный без ветвления в клиентском коде — на примерах PHP.
- 9
Шаблонный метод
Разбираем поведенческий паттерн «Шаблонный метод» (Template Method): как зафиксировать общий скелет алгоритма в базовом классе, оставив конкретные шаги на усмотрение подклассов — на примерах PHP.
- 10
Посетитель
Разбираем поведенческий паттерн «Посетитель» (Visitor): как добавлять новые операции над набором разнородных классов, не меняя сами эти классы, через двойную диспетчеризацию — на примерах PHP.