Шаблон «Template method» (Шаблонный метод)

ООП в PHP

Основное назначение Template method — выделить из основного класса какие-то операции, которые могут быть выполнены классами-наследниками.

Пример кода я разместил на гитхабе.

Смысл шаблона достаточно простой: есть некий абстрактный класс, который реализует всю необходимую логику. Для тех операций, которые могут меняться, создаются абстрактные методы. Также в классе могут быть базовые и «пустые» методы, которые предполагается переопределять в наследниках.

Метод run()содержит алгоритм выполнения. Понятно, что таких методов может быть несколько. Дальше просто: создаются наследники, которые а) реализуют абстрактные методы и б) переопределяют, если нужно, другие.

Если другими словами, то Шаблонный метод не что иное, как наследование, а не композиция. Такой алгоритм очень часто используется в PHP, например во фреймворках (например при создании контролёра или модели).

Читать дальше →

Шаблон Proxy (Заместитель)

ООП в PHP

Шаблон Proxy достаточно точно отражает назначение в своём названии — заменять обращения к реальному классу через посредника. Proxy-класс ещё иногда называют контейнером.

Суть этого шаблона в том, чтобы полностью скрыть реализацию реального класса: то есть мы работаем с Proxy, который уже передаёт обращения к «реальному» классу.

Исходный код на гитхабе.

В той или иной мере этот паттерн используется постоянно, поскольку это ещё один «типовой» вариант композиции.

Читать дальше →

Шаблон Flyweight (Приспособленец)

ООП в PHP

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

Исходный код я разместил на гитхабе.

Итак. Пусть у нас есть несколько однотипных классов (ClassA, ClassB, ClassC), которые выполняют какую-то свою работу. При желании можно реализовать их от общего интерфейса.

Когда классов много, то каждый из них не совсем удобно инстанцировать отдельно. Вместо этого создается класс FlyweightFactory: он сам создает объект, но делает это только один раз. При повторном вызове возвращается уже готовый объект. Такой алгоритм позволяет оптимизировать расход памяти программы.

Читать дальше →

Шаблон Decorator (Декоратор)

ООП в PHP

Шаблон Decorator используется там, где нужно расширить функциональность существующего класса. Например вы делаете сайт, где используется какой-то компонент (блок, виджет и т.д.). За это отвечает класс компонента. Потом выясняется, что нужно сделать ещё один компонент для другого вывода. Поскольку все компоненты основаны на одном интерфейсе (или абстрактном классе), то проблем нет. И в какой-то момент, вдруг выясняется, что все компоненты должны поддерживать какую-то новую функциональность, например вывод блока оформления до и после самого компонента.

Очевидно, что переписывать все существующие классы не самая лучшая идея, поэтому здесь на помощь и приходит паттерн Декоратор.

Читать дальше →

Шаблон Bridge (Мост)

ООП в PHP

Паттерн Bridge представляет собой возможность объединения двух разных интерфейсов так, чтобы каждый из них развивался раздельно. Чтобы понять его назначение, проще всего объяснить на примере Java.

Приложение Java должны работать в разных операционных системах и возникает проблема унификации элементов. Например чекбоксы или выпадающие списки в Windows и Linux имеют разный вид. Таким образом, библиотека визуальных компонентов должна развиваться отдельно, но будет ещё один интерфейс, который будет реализовывать уже конкретную версию отрисовки. Вот такая взаимосвязь и реализуется через шаблон Мост.

Читать дальше →

Перейти к странице: