Главная страница / Техногрет / Шаблоны проектирования / Отложенный вызов (упрощаем паттерн Заместитель)

2 марта 2009

Отложенный вызов (упрощаем паттерн Заместитель)

Очень часто в процессе написания приложений в стиле ООП, возникает необходимость отложенного вызова. Что такое отложенный вызов? Это инстанцирование объекта, по мере необходимости. Своего рода, это упрощенная реализация паттерна "Proxy" (Заместитель)

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

Тупой вариант

На данном этапе данная версия имеет место быть, однако, по мере усложнения кода конструктора: допустим нам надо создать 10 объектов, либо по мере появления методов использование которых не требует smarty (например, запись в базу и редирект), такой подход может вносить путаницу в код, и чрезмерное использование ресурсов, там где не надо.

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

Таким образом, затратная операция инстанцирования смарти, нами будет выполнена едино кратно, и только по необходимости.

Отложенный вызов

Добавим гибкости в наш код и приведем другой пример.

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

Нам требуется всего лишь добавить аксессор set:

Использование отложенного вызова с аксессором

Теперь, если установить извне новый шаблонизатор, он будет работать вместо старого, не теряя совместимости со старыми контроллерами наследными от главного. Естественно, классы Smarty и SuperSpeedSmarty должны иметь общий интерфейс.

© Weltkind 2008
validator