Design Patterns (GoF): различия между версиями

Материал из Home Wiki
Перейти к навигации Перейти к поиску
Строка 1: Строка 1:
= Каталог паттернов проектирования =
Каталог паттернов проектирования.
Каталог содержит 23 паттерна. Ниже для удобства перечислены их имена и назначение.
Каталог содержит 23 паттерна. Ниже для удобства перечислены их имена и назначение.
В скобках после названия каждого паттерна указан номер страницы, откуда начинается его подробное описание.
В скобках после названия каждого паттерна указан номер страницы, откуда начинается его подробное описание.
== Abstract Factory (абстрактная фабрика) ==
= Abstract Factory (абстрактная фабрика) =
(93)
(93)


Предоставляет интерфейс для создания семейств, связанных между собой,
Предоставляет интерфейс для создания семейств, связанных между собой,
или независимых объектов, конкретные классы которых неизвестны.
или независимых объектов, конкретные классы которых неизвестны.
== Adapter (адаптер) ==
= Adapter (адаптер) =
(141)
(141)


Строка 13: Строка 13:
Обеспечивает совместную работу классов, которая была бы невозможна без данного
Обеспечивает совместную работу классов, которая была бы невозможна без данного
паттерна из-за несовместимости интерфейсов.
паттерна из-за несовместимости интерфейсов.
== Bridge (мост) ==
= Bridge (мост) =
(152)
(152)


Отделяет абстракцию от реализации, благодаря чему появляется возможность независимо изменять то и другое.
Отделяет абстракцию от реализации, благодаря чему появляется возможность независимо изменять то и другое.
== Builder (строитель) ==
= Builder (строитель) =
(103)
(103)


Отделяет конструирование сложного объекта от его представления,  
Отделяет конструирование сложного объекта от его представления,  
позволяя использовать один и тот же процесс конструирования для создания различных представлений.
позволяя использовать один и тот же процесс конструирования для создания различных представлений.
== Chain of Responsibility (цепочка обязанностей) ==
= Chain of Responsibility (цепочка обязанностей) =
(217)
(217)


Строка 29: Строка 29:
Объекты-получатели связываются в цепочку, и запрос передается по цепочке,
Объекты-получатели связываются в цепочку, и запрос передается по цепочке,
пока какой-то объект его не обработает.
пока какой-то объект его не обработает.
== Command (команда) ==
= Command (команда) =
(226)
(226)


Строка 35: Строка 35:
клиентов типом запроса, устанавливать очередность запросов, протоколировать
клиентов типом запроса, устанавливать очередность запросов, протоколировать
их и поддерживать отмену выполнения операций.
их и поддерживать отмену выполнения операций.
== Composite (компоновщик) ==
= Composite (компоновщик) =
(162)
(162)


Группирует объекты в древовидные структуры для представления иерархий типа «часть-целое».
Группирует объекты в древовидные структуры для представления иерархий типа «часть-целое».
Позволяет клиентам работать с единичными объектами так же, как с группами объектов.
Позволяет клиентам работать с единичными объектами так же, как с группами объектов.
== Decorator (декоратор) ==
= Decorator (декоратор) =
(173)
(173)


Строка 46: Строка 46:
Декораторы применяются для расширения имеющейся функциональности и
Декораторы применяются для расширения имеющейся функциональности и
являются гибкой альтернативой порождению подклассов.
являются гибкой альтернативой порождению подклассов.
== Facade (фасад) ==
= Facade (фасад) =
(183)
(183)


Предоставляет унифицированный интерфейс к множеству интерфейсов в некоторой подсистеме.
Предоставляет унифицированный интерфейс к множеству интерфейсов в некоторой подсистеме.
Определяет интерфейс более высокого уровня, облегчающий работу с подсистемой.Каталог паттернов проектирования
Определяет интерфейс более высокого уровня, облегчающий работу с подсистемой.Каталог паттернов проектирования
== Factory Method (фабричный метод) ==
= Factory Method (фабричный метод) =
(111)
(111)


Определяет интерфейс для создания объектов, при этом выбранный класс инстанцируется подклассами.
Определяет интерфейс для создания объектов, при этом выбранный класс инстанцируется подклассами.
== Flyweight (приспособленец) ==
= Flyweight (приспособленец) =
(191)
(191)


Использует разделение для эффективной поддержки большого числа мелких объектов.
Использует разделение для эффективной поддержки большого числа мелких объектов.
== Interpreter (интерпретатор) ==
= Interpreter (интерпретатор) =
(236)
(236)


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


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


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


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


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


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


Подменяет другой объект для контроля доступа к нему.
Подменяет другой объект для контроля доступа к нему.
== Singleton (одиночка) ==
= Singleton (одиночка) =
(130)
(130)


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


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


Определяет семейство алгоритмов, инкапсулируя их все и позволяя подставлять один вместо другого.
Определяет семейство алгоритмов, инкапсулируя их все и позволяя подставлять один вместо другого.
Можно менять алгоритм независимо от клиента, который им пользуется.введение в паттерны проектирования
Можно менять алгоритм независимо от клиента, который им пользуется.введение в паттерны проектирования
== Template Method (шаблонный метод) ==
= Template Method (шаблонный метод) =
(309)
(309)


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


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

Версия 00:34, 6 февраля 2017

Каталог паттернов проектирования. Каталог содержит 23 паттерна. Ниже для удобства перечислены их имена и назначение. В скобках после названия каждого паттерна указан номер страницы, откуда начинается его подробное описание.

Abstract Factory (абстрактная фабрика)

(93)

Предоставляет интерфейс для создания семейств, связанных между собой, или независимых объектов, конкретные классы которых неизвестны.

Adapter (адаптер)

(141)

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

Bridge (мост)

(152)

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

Builder (строитель)

(103)

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

Chain of Responsibility (цепочка обязанностей)

(217)

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

Command (команда)

(226)

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

Composite (компоновщик)

(162)

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

Decorator (декоратор)

(173)

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

Facade (фасад)

(183)

Предоставляет унифицированный интерфейс к множеству интерфейсов в некоторой подсистеме. Определяет интерфейс более высокого уровня, облегчающий работу с подсистемой.Каталог паттернов проектирования

Factory Method (фабричный метод)

(111)

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

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

(191)

Использует разделение для эффективной поддержки большого числа мелких объектов.

Interpreter (интерпретатор)

(236)

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

Iterator (итератор)

(173)

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

Mediator (посредник)

(263)

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

Memento (хранитель)

(272)

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

Observer (наблюдатель)

(281)

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

Prototype (прототип)

(121)

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

Proxy (заместитель)

(203)

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

Singleton (одиночка)

(130)

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

State (состояние)

(291)

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

Strategy (стратегия)

(300)

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

Template Method (шаблонный метод)

(309)

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

Visitor (посетитель)

(314)

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