Category Archives: Выполнение задач и представление результатов в PHP

Шаблон Visitor

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

Реализация шаблона Observer

В основе шаблона Observer лежит принцип отсоединения клиентских элементов (наблюдателей) от центрального класса (субъекта). Наблюдатели должны быть проинформированы, когда происходят события, о которых знает субъект. В то же время мы не хотим, чтобы у субъекта была жестко закодированная связь с его классами-наблюдателями.

Чтобы достичь этого, мы можем разрешгть наблюдателям регистрироваться у субъекта. Поэтому мы даем классу Login три новых метода — attach (), detach () и notify (), и все это вводим в действие с помощью интерфейса observable.

Шаблон Observer

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

Реализация шаблона Strategy

Как и все лучшие шаблоны. Strategy одновременно и прост, и функционален. Когда классы должны поддерживать несколько реализаций интерфейса (например, несколько механизмов оценки), то наилучший подход — это, как правило, выделить эти реализации и поместить их в собственный тип, а не расширять первоначальный класс, чтобы работать с ними.

Так, в нашем примере алгоритм оценки можно поместить в класс Marker. Новая структура показана на рис.

Шаблон Strategy. Проблема шаблона Strategy

Разработчики часто пытаются наделить классы слишком большими функциональными возможностями. И это понятно: вы создаете класс, который выполняет несколько связанных действий. Как и код, некоторые из этих действий нужно изменять в зависимости от обстоятельств. В то же время классы необходимо разбивать на подклассы. И прежде чем вы это поймете, ваш проект будет рассыпаться как карточный домик.