8.7. КАКИМИ БЫВАЮТ ОБЪЕКТЫ ПО УСТРОЙСТВУ
8.7. КАКИМИ БЫВАЮТ ОБЪЕКТЫ ПО УСТРОЙСТВУ
Под паттернами проектирования понимается описание взаимодействия объектов и классов, адаптированных для решения общей задачи проектирования в конкретном контексте. Паттерн проектирования — это образец, типовое решение какого-либо механизма объектно-ориентированной программы. Паттерны создавались несколько лет коллективом с целью уравнивания шансов на хороший проект опытных и не очень опытных проектировщиков. По словам архитектора Кристофера Александра, "любой паттерн описывает задачу, которая снова и снова возникает в нашей работе, а также принцип ее решения, причем таким образом, что это решение можно потом использовать миллион раз, ничего не изобретая заново".
В общем случае паттерн состоит из четырех основных элементов: имени, задачи, решения, результатов.
Имя. Сославшись на него, можно сразу описать проблему проектирования, ее решения и их последствия. С помощью словаря паттернов можно вести обсуждение с коллегами, упоминать паттерны в документации.
Задача — описание того, когда следует применять паттерн. Здесь может описываться конкретная проблема проектирования, например способ представления алгоритмов в виде объектов. Иногда отмечается, какие структуры классов или объектов свидетельствуют о негибком дизайне. Также может включаться перечень условий, при выполнении которых имеет смысл применять данный паттерн.
Решение — описание элементов дизайна, отношений между ними, функций каждого элемента. Конкретный дизайн или реализация не имеются в виду, поскольку паттерн — это шаблон, применимый в самых разных ситуациях. Просто дается абстрактное описание задачи проектирования и того, как она может быть решена с помощью некоего весьма обобщенного сочетания элементов (в нашем случае классов и объектов).
Результаты — это следствия применения паттерна и разного рода компромиссы. Хотя при описании проектных решений о последствиях часто не упоминают, знать о них необходимо, чтобы можно было осуществить выбор различных вариантов и оценить преимущества и недостатки выбранного паттерна. Здесь речь идет о выборе языка и реализации. Поскольку в объектно-ориентированном проектировании повторное использование зачастую является важным фактором, то к результатам следует относить и влияние на степень гибкости, расширяемости и переносимости системы. Перечисление всех последствий поможет вам понять и оценить их роль. Ниже приведен полный список разделов описания паттерна:
— название и классификация паттерна (название паттерна должно четко отражать его назначение);
— назначение (лаконичный ответ на следующие вопросы: каковы функции паттерна, его обоснование и назначение, какую конкретную задачу проектирования можно решить с его помощью);
— известен также под именем (другие распространенные названия паттерна, если таковые имеются);
— мотивация (сценарий, иллюстрирующий задачу проектирования и то, как она решается данной структурой класса или объекта. Благодаря мотивации, можно лучше понять последующее, более абстрактное описание паттерна);
— применимость (описание ситуаций, в которых можно применять данный паттерн; примеры проектирования, которые можно улучшить с его помощью);
— структура (графическое представление классов в паттерне с использованием нотации, основанной на методике ОМТ, а также с использованием диаграмм взаимодействий для иллюстрации последовательностей запросов и отношений между объектами);
— участники (классы или объекты, задействованные в данном паттерне проектирования, и их функции);
— отношения (взаимодействие участников для выполнения своих функций);
— результаты (насколько паттерн удовлетворяет поставленным требованиям? Результаты применения, компромиссы, на которые приходится идти. Какие аспекты поведения системы можно независимо изменять, используя данный паттерн?);
— реализация (сложности и так называемые "подводные камни" при реализации паттерна; советы и рекомендуемые приемы; есть ли у данного паттерна зависимость от языка программирования?);
— пример кода (фрагмент кода, иллюстрирующий вероятную реализацию на языках C++ или Smalltalk);
— известные применения (возможности применения паттерна в реальных системах; даются, по меньшей мере, два примера из различных областей);
— родственные паттерны (связь других паттернов проектирования с данными, важные различия, использование данного паттерна в сочетании с другими).
Каталог содержит 23 паттерна. Ниже для удобства перечислены их имена и назначение.
1. Abstract Factory (абстрактная фабрика). Предоставляет интерфейс для создания семейств, связанных между собой, или независимых объектов, конкретные классы которых неизвестны.
2. Adapter (адаптер). Преобразует интерфейс класса в некоторый другой интерфейс, ожидаемый клиентами. Обеспечивает совместную работу классов, которая была бы невозможна без данного паттерна из-за несовместимости интерфейсов.
3. Bridge (мост). Отделяет абстракцию от реализации, благодаря чему появляется возможность независимо изменять то и другое.
4. Builder (строитель). Отделяет конструирование сложного объекта от его представления, позволяя использовать один и тот же процесс конструирования для создания различных представлений.
5. Chain of Responsibility (цепочка обязанностей). Можно избежать жесткой зависимости отправителя запроса от его получателя, при этом запросом начинает обрабатываться один из нескольких объектов. Объекты-получатели связываются в цепочку, и запрос передается по цепочке, пока какой-то объект его не обработает.
6. Command (команда). Инкапсулирует запрос в виде объекта, позволяя тем самым параметризовывать клиентов типом запроса, устанавливать очередность запросов, протоколировать их и поддерживать отмену выполнения операций.
7. Composite (компоновщик). Группирует объекты в древовидные структуры для представления иерархий типа "часть-целое". Позволяет клиентам работать с единичными объектами так же, как с группами объектов.
8. Decorator (декоратор). Динамически возлагает на объект новые функции. Декораторы применяются для расширения имеющейся функциональности и являются гибкой альтернативой порождению подклассов.
9. Facade (фасад). Предоставляет унифицированный интерфейс к множеству интерфейсов в некоторой подсистеме. Определяет интерфейс более высокого уровня, облегчающий работу с подсистемой.
10. Factory Method (фабричный метод). Определяет интерфейс для создания объектов, при этом выбранный класс инстанцируется подклассами.
11. Flyweight (приспособленец). Использует разделение для эффективной поддержки большого числа мелких объектов.
12. Interpreter (интерпретатор). Для заданного языка определяет представление его грамматики, а также интерпретатор предложений языка, использующий это представление.
13. Iterator (итератор). Дает возможность последовательно обойти все элементы составного объекта, не раскрывая его внутреннего представления.
14. Mediator (посредник). Определяет объект, в котором инкапсулировано знание о том, как взаимодействуют объекты из некоторого множества. Способствует уменьшению числа связей между объектами, позволяя им работать без явных ссылок друг на друга. Это, в свою очередь, дает возможность независимо изменять схему взаимодействия.
15. Memento (хранитель). Позволяет, не нарушая инкапсуляции, получить и сохранить во внешней памяти внутреннее состояние объекта, чтобы позже объект можно было восстановить точно в таком же состоянии.
16. Observer (наблюдатель). Определяет между объектами зависимость типа "один ко многим", так что при изменении состояния одного объекта все зависящие от него получают извещение и автоматически обновляются.
17. Prototype (прототип). Описывает виды создаваемых объектов с помощью прототипа и создает новые объекты путем его копирования.
18. Proxy (заместитель). Подменяет другой объект для контроля доступа к нему.
19. Singleton (одиночка). Гарантирует, что некоторый класс может иметь только один экземпляр, и предоставляет глобальную точку доступа к нему.
20. State (состояние). Позволяет объекту варьировать свое поведение при изменении внутреннего состояния. При этом создается впечатление, что поменялся класс объекта.
21. Strategy (стратегия). Определяет семейство алгоритмов, инкапсулируя их все и позволяя подставлять один вместо другого. Можно менять алгоритм независимо от клиента, который им пользуется.
22. Template Method (шаблонный метод). Определяет скелет алгоритма, перекладывая ответственность за некоторые его шаги на подклассы. Позволяет подклассам переопределять шаги алгоритма, не меняя его общей структуры.
23. Visitor (посетитель). Представляет операцию, которую надо выполнить над элементами объекта. Позволяет определить новую операцию, не меняя классы элементов, к которым он применяется.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Какие бывают блоги
Какие бывают блоги Существует много классификаций блогов, но в этом разделе мы рассмотрим два основных типа блогов — с точки зрения технической базы, на которой они размещаются.БлогохостингиСайты, на которых можно зарегистрироваться и бесплатно вести блог без
Какие бывают состояния пользователей
Какие бывают состояния пользователей Понятно, что постоянно сидеть за компьютером очень утомительно. Иногда нужно и по делам сходить или вздремнуть часок-другой прямо на клавиатуре. Однако вдруг в это самое время кто-то захочет с вами поговорить — он-то не знает, что вы
Какие бывают оповещения
Какие бывают оповещения При работе с Windows Messenger могут появляться оповещения в области уведомлений рядом со значком программы. Эти оповещения можно условно разделить на три вида:? о том, что пользователь, который находится в вашем списке контактов, вошел в систему;? при
Какие бывают сайты?
Какие бывают сайты? Сайт сайту рознь. И будет нелишним узнать, чем же они отличаются друг от
Значки бывают разные
Значки бывают разные Как уже было сказано выше, в области содержимого папки отображаются значки вложенных в нее папок и файлов. Значки эти могут выглядеть по-разному. Как? Это вам решать.Разберемся, какие способы отображения значков есть в Проводнике Vista. Для этого на
Какие бывают программы?
Какие бывают программы? Виды программ по назначению Системные программыЭто первая и самая обширная группа программ, с которыми нам придется иметь дело. Они нужны для обеспечения нормальной работы компьютера, его обслуживания и настройки. Это в первую очередь
Объекты DataSet с множеством таблиц и объекты DataRelation
Объекты DataSet с множеством таблиц и объекты DataRelation До этого момента во всех примерах данной главы объекты DataSet содержали по одному объекту DataTable. Однако вся мощь несвязного уровня ADO.NET проявляется тогда, когда DataSet содержит множество объектов DataTable. В этом случае вы можете
6.3.2. Доступ к устройству путем открытия файла
6.3.2. Доступ к устройству путем открытия файла Как работать с аппаратными устройствами? В случае символьного устройства ответ прост: откройте ссылку на устройство как обычный файл и осуществляйте чтение-запись традиционным образом. Например, если к первому параллельному
Yesterday: какими были журналы в 1965 г.
Yesterday: какими были журналы в 1965 г. Автор: Сергей ЛеоновПохоже, современная периодика по своей сути не слишком изменилась за последние сорок лет. Листая издание 1965 года (журнал Electronics, McGraw Hill Publications, #8, 19 апреля 1965 года, номер примечательный тем, что именно в нем вышла статья
Какими бывают гаджеты?
Какими бывают гаджеты? Гаджеты (англ. gadget — приспособление, штуковина) — необычные электронные устройства, например, телефон или телевизор в наручных часах. Гаджетами или виджетами зовут и мини-приложения с забавными, но зачастую полезными функциями. В Windows 7 для
1.3. Какие бывают компьютеры
1.3. Какие бывают компьютеры Компьютеры можно подразделить на два стандарта — IBM PC и Macintosh.IBM PC-совместимые компьютеры стоят в большинстве домов и организаций, именно о работе на этих ПК и пойдет разговор в книге. Кроме обычных компьютеров (с системным блоком, клавиатурой,
Младший брат «Айфона»: какими будут iPhone 5S и 5C Андрей Письменный
Младший брат «Айфона»: какими будут iPhone 5S и 5C Андрей Письменный Опубликовано 16 августа 2013 Помните, о чём говорила общественность год назад — в августе 2012-го? Главной темой, конечно, был суд над Pussy Riot, однако речь не о нём, а о слухах, предшествовавших
Google Glass XXX: индустрия «18+» приглядывается к новому устройству Виктор Ласло
Google Glass XXX: индустрия «18+» приглядывается к новому устройству Виктор Ласло Опубликовано 11 апреля 2013 Могут ли две порноактрисы навести шороху на весь интернет, чтобы не сказать на всю ИТ-индустрию? И если да, то что они должны для этого сделать? Ответ:
4.4. КЛАССИФИКАЦИЯ ВИДОВ ОПЕРАТИВНЫХ СТРУКТУР ДАННЫХ ПО ИХ ЛОГИЧЕСКОМУ УСТРОЙСТВУ
4.4. КЛАССИФИКАЦИЯ ВИДОВ ОПЕРАТИВНЫХ СТРУКТУР ДАННЫХ ПО ИХ ЛОГИЧЕСКОМУ УСТРОЙСТВУ Часто, говоря о той или иной структуре данных, имеют в виду ее логическое представление. Физическое представление может не соответствовать логическому и, кроме того, может существенно