Паттерны проектирования приложений

Паттерны проектирования - описание взаимодействия объектов и классов, адаптированных для решения общей задачи проектирования в конкретном контексте.

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

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

Для заданного языка определяет представление его грамматики, а также интерпретатор предложений языка, использующий это представление.

Подменяет другой объект для контроля доступа к нему.

Дает возможность последовательно обойти все элементы составного объекта, не раскрывая его внутреннего представления.

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

Определяет объект, в котором инкапсулировано знание о том, как взаимодействуют объекты из некоторого множества. Способствует уменьшению числа связей между объектами, позволяя им работать без явных ссылок друг на друга. Это, в свою очередь, дает возможность независимо менять схему взаимодействия.

Позволяет объекту варьировать свое поведение при изменении внутреннего состояния. При этом создается впечатление, что поменялся класс объекта.

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

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

Определяет между объектами зависимость типа один ко многим, так что при изменении состояния одного объекта, все зависящие от него получают извещение и автоматически обновляются.

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

Описывает виды создаваемых объектов с помощью прототипа и создает новые объекты путем его копирования.

Представляет операцию, которую надо выполнить над элементами объекта. Позволяет определить новую операцию, не меняя классы элементов, к которым он применяется.