Шаблон проектирования программного обеспечения - Software design pattern
В программная инженерия, а шаблон разработки программного обеспечения генерал, многоразовый решение часто встречающейся проблемы в данном контексте в разработка программного обеспечения. Это не законченный дизайн, который можно преобразовать прямо в источник или Машинный код. Скорее, это описание или шаблон решения проблемы, который можно использовать во многих различных ситуациях. Шаблоны проектирования формализованы лучшие практики которые программист может использовать для решения общих проблем при разработке приложения или системы.
Объектно-ориентированный шаблоны проектирования обычно показывают отношения и взаимодействия между классы или объекты, без указания конечных классов приложения или задействованных объектов. Шаблоны, предполагающие изменяемое состояние, могут не подходить для функциональное программирование Языки, некоторые шаблоны могут быть ненужными в языках, которые имеют встроенную поддержку для решения проблемы, которую они пытаются решить, а объектно-ориентированные шаблоны не обязательно подходят для не объектно-ориентированных языков.
Шаблоны проектирования можно рассматривать как структурированный подход к компьютерное программирование промежуточный между уровнями парадигма программирования и бетон алгоритм.
В недавнем обзорном исследовании Wedyan и Abufakher исследуют шаблоны проектирования и качество программного обеспечения и сделаем вывод: «Наше исследование показало, что первичные исследования предоставляют эмпирические доказательства положительного влияния документации экземпляров шаблонов проектирования на понимание программы и, следовательно, на ремонтопригодность. Хотя этот результат не удивителен, он имеет два признака. Во-первых, разработчики следует приложить больше усилий для добавления такой документации, даже если в форме простых комментариев в исходный код. Во-вторых, при сравнении результатов различных исследований необходимо учитывать влияние документации ».[1]
История
Узоры возникли как архитектурная концепция от Кристофер Александр еще в 1966 г. (см. «Узор улиц», ЖУРНАЛ AIP, сентябрь 1966 г., том 32, № 3, стр. 273-278). В 1987 г. Кент Бек и Уорд Каннингем начал экспериментировать с идеей применения шаблонов в программировании, в частности языки шаблонов - и представили свои результаты на OOPSLA конференция в том году.[2][3] В последующие годы Бек, Каннингем и другие продолжили эту работу.
Паттерны дизайна приобрели популярность в Информатика после книги Паттерны проектирования: элементы объектно-ориентированного программного обеспечения многократного использования был опубликован в 1994 году так называемой «Бандой четырех» (Gamma et al.), которую часто сокращают как «GoF». В том же году первый Паттерн-языки программирования Конференция была проведена, и в следующем году Репозиторий портлендских паттернов был настроен для документации шаблонов проектирования. Объем термина остается предметом споров. Известные книги в жанре паттернов дизайна включают:
- Гамма, Эрих; Хелм, Ричард; Джонсон, Ральф; Влиссидес, Джон (1995). Паттерны проектирования: элементы объектно-ориентированного программного обеспечения многократного использования. Эддисон-Уэсли. ISBN 978-0-201-63361-0.
- Бринч Хансен, Пер (1995). Исследования в области вычислительной науки: парадигмы параллельного программирования. Прентис Холл. ISBN 978-0-13-439324-7.
- Бушманн, Франк; Менье, Регина; Ронерт, Ганс; Соммерлад, Питер (1996). Шаблонно-ориентированная архитектура программного обеспечения, Том 1: Система шаблонов. Джон Вили и сыновья. ISBN 978-0-471-95869-7.
- Бек, Кент (1997). Шаблоны передовой практики Smalltalk. Прентис Холл. ISBN 978-0134769042.
- Шмидт, Дуглас К.; Сталь, Михаил; Ронерт, Ганс; Бушманн, Франк (2000). Шаблонно-ориентированная архитектура программного обеспечения, Том 2: Шаблоны для параллельных и сетевых объектов. Джон Вили и сыновья. ISBN 978-0-471-60695-6.
- Фаулер, Мартин (2002). Паттерны архитектуры корпоративных приложений. Эддисон-Уэсли. ISBN 978-0-321-12742-6.
- Хохпе, Грегор; Вульф, Бобби (2003). Шаблоны корпоративной интеграции: проектирование, создание и развертывание решений для обмена сообщениями. Эддисон-Уэсли. ISBN 978-0-321-20068-6.
- Фриман, Эрик Т; Робсон, Элизабет; Бейтс, Берт; Сьерра, Кэти (2004). Шаблоны проектирования Head First. O'Reilly Media. ISBN 978-0-596-00712-6.
Хотя шаблоны проектирования применялись практически давно, формализация концепции шаблонов проектирования томилась на несколько лет.[4]
Практика
Шаблоны проектирования могут ускорить процесс разработки, предоставляя проверенные, проверенные парадигмы разработки.[5] Эффективный дизайн программного обеспечения требует рассмотрения вопросов, которые могут не проявиться до конца реализации. Недавно написанный код часто может иметь скрытые тонкие проблемы, на обнаружение которых требуется время, проблемы, которые иногда могут вызвать серьезные проблемы в будущем. Повторное использование шаблонов проектирования помогает предотвратить такие тонкие проблемы[нужна цитата ], а также улучшает читаемость кода для программистов и архитекторов, знакомых с шаблонами.
Для достижения гибкости шаблоны проектирования обычно вводят дополнительные уровни косвенное обращение, что в некоторых случаях может усложнить конечный дизайн и снизить производительность приложения.
По определению, шаблон должен быть запрограммирован заново в каждом приложении, которое его использует. Поскольку некоторые авторы видят в этом шаг назад от повторное использование программного обеспечения как предусмотрено компоненты, исследователи работали над превращением паттернов в компоненты. Мейер и Арноут смогли предоставить полную или частичную компонентность двух третей шаблонов, которые они пытались использовать.[6]
Методы проектирования программного обеспечения трудно применить к более широкому кругу проблем.[нужна цитата ] Шаблоны проектирования предоставляют общие решения, задокументированный в формате, не требующем специфики, привязанной к конкретной проблеме.
Структура
Паттерны проектирования состоят из нескольких разделов (см. § Документация ниже). Особый интерес представляют разделы «Структура», «Участники» и «Сотрудничество». В этих разделах описывается мотив дизайна: прототип микроархитектура которые разработчики копируют и адаптируют к своим конкретным проектам для решения повторяющейся проблемы, описываемой шаблоном проектирования. Микроархитектура - это набор компонентов программы (например, классов, методов ...) и их взаимосвязей. Разработчики используют шаблон проектирования, внедряя в свои проекты эту прототипную микроархитектуру, что означает, что микроархитектуры в их проектах будут иметь структуру и организацию, аналогичные выбранному шаблону дизайна.
Шаблоны для конкретных доменов
Также были предприняты усилия по кодификации шаблонов проектирования в конкретных областях, включая использование существующих шаблонов проектирования, а также шаблонов проектирования для конкретных областей. Примеры включают пользовательский интерфейс шаблоны проектирования,[7] визуализация информации,[8] безопасный дизайн,[9] "безопасное юзабилити",[10] веб-дизайн [11] и дизайн бизнес-модели.[12]
Ежегодный Паттерн-языки программирования Материалы конференций [13] включают множество примеров шаблонов, специфичных для предметной области.
Классификация и список
Паттерны проектирования изначально были разделены на 3 подкласса в зависимости от типа решаемой ими проблемы. Шаблоны создания предоставить возможность создавать объекты на основе необходимого критерия и контролируемым образом. Структурные образцы посвящены организации различных классов и объектов для формирования более крупных структур и предоставления новых функций. В заключение, поведенческие модели посвящены выявлению общих паттернов общения между объектами и реализации этих паттернов.
Шаблоны создания
имя | Описание | В Шаблоны проектирования | В Код завершен[14] | Другой |
---|---|---|---|---|
Абстрактная фабрика | Предоставьте интерфейс для создания семьи связанных или зависимых объектов без указания их конкретных классов. | да | да | Нет данных |
Строитель | Отделяйте построение сложного объекта от его представления, позволяя одному и тому же процессу построения создавать различные представления. | да | Нет | Нет данных |
Внедрение зависимости | Класс принимает требуемые объекты от инжектора вместо того, чтобы создавать объекты напрямую. | Нет | Нет | Нет данных |
Заводской метод | Определите интерфейс для создания не замужем объект, но позвольте подклассам решать, какой класс создать. Заводской метод позволяет классу отложить создание экземпляра до подклассов. | да | да | Нет данных |
Ленивая инициализация | Тактика откладывания создания объекта, вычисления стоимости или другого дорогостоящего процесса до первой необходимости. Этот шаблон появляется в каталоге GoF как «виртуальный прокси», стратегия реализации для Прокси шаблон. | Нет | Нет | PoEAA[15] |
Мультитон | Убедитесь, что у класса есть только именованные экземпляры, и предоставьте им глобальную точку доступа. | Нет | Нет | Нет данных |
Пул объектов | Избегайте дорогостоящего приобретения и высвобождения ресурсов за счет утилизации неиспользуемых объектов. Можно считать обобщением пул соединений и пул потоков узоры. | Нет | Нет | Нет данных |
Прототип | Укажите типы объектов для создания с использованием прототипа и создайте новые объекты из «скелета» существующего объекта, таким образом повышая производительность и сводя к минимуму объем памяти. | да | Нет | Нет данных |
Приобретение ресурсов - это инициализация (RAII) | Убедитесь, что ресурсы высвобождаются должным образом, привязав их к сроку службы подходящих объектов. | Нет | Нет | Нет данных |
Синглтон | Убедитесь, что у класса есть только один экземпляр, и предоставьте ему глобальную точку доступа. | да | да | Нет данных |
Структурные образцы
имя | Описание | В Шаблоны проектирования | В Код завершен[14] | Другой |
---|---|---|---|---|
Адаптер, Оболочка или переводчик | Преобразование интерфейса класса в другой интерфейс, ожидаемый клиентами. Адаптер позволяет классам работать вместе, что иначе было бы невозможно из-за несовместимых интерфейсов. Эквивалент модели интеграции предприятия - переводчик. | да | да | Нет данных |
Мост | Отделите абстракцию от ее реализации, позволяя им изменяться независимо. | да | да | Нет данных |
Композитный | Объединяйте объекты в древовидные структуры для представления иерархий «частично-целое». Composite позволяет клиентам обрабатывать отдельные объекты и композиции объектов единообразно. | да | да | Нет данных |
Декоратор | Добавляйте дополнительные обязанности к объекту, динамически сохраняя тот же интерфейс. Декораторы предоставляют гибкую альтернативу созданию подклассов для расширения функциональности. | да | да | Нет данных |
Объект расширения | Добавление функциональности в иерархию без изменения иерархии. | Нет | Нет | Гибкая разработка программного обеспечения, принципы, шаблоны и практики[16] |
Фасад | Предоставляет унифицированный интерфейс для набора интерфейсов в подсистеме. Фасад определяет интерфейс более высокого уровня, который упрощает использование подсистемы. | да | да | Нет данных |
Наилегчайший вес | Используйте общий доступ для эффективной поддержки большого количества похожих объектов. | да | Нет | Нет данных |
Передний контроллер | Шаблон относится к дизайну веб-приложений. Он обеспечивает централизованную точку входа для обработки запросов. | Нет | Нет | |
Маркер | Пустой интерфейс для связи метаданных с классом. | Нет | Нет | Эффективная Java[19] |
Модуль | Сгруппируйте несколько связанных элементов, таких как классы, синглтоны, методы, используемые глобально, в единую концептуальную сущность. | Нет | Нет | Нет данных |
Прокси | Предоставьте суррогат или заполнитель для другого объекта, чтобы контролировать доступ к нему. | да | Нет | Нет данных |
Близнец [20] | Twin позволяет моделировать множественное наследование на языках программирования, которые не поддерживают эту функцию. | Нет | Нет | Нет данных |
Модели поведения
имя | Описание | В Шаблоны проектирования | В Код завершен[14] | Другой |
---|---|---|---|---|
Доска | Искусственный интеллект шаблон для объединения разрозненных источников данных (см. система доски ) | Нет | Нет | Нет данных |
Цепочка ответственности | Избегайте связывания отправителя запроса с его получателем, давая возможность более чем одному объекту обработать запрос. Объедините получающие объекты в цепочку и передайте запрос по цепочке, пока объект не обработает его. | да | Нет | Нет данных |
Команда | Инкапсулируйте запрос как объект, тем самым позволяя параметризацию клиентов с различными запросами, а также создание очереди или протоколирование запросов. Это также позволяет поддерживать отменяемые операции. | да | Нет | Нет данных |
Переводчик | Для данного языка определите представление для его грамматики вместе с интерпретатором, который использует это представление для интерпретации предложений на языке. | да | Нет | Нет данных |
Итератор | Обеспечьте способ доступа к элементам совокупность объект последовательно, не раскрывая его базовое представление. | да | да | Нет данных |
Посредник | Определите объект, который инкапсулирует, как взаимодействует набор объектов. Посредник продвигает Слабая связь не позволяя объектам явно ссылаться друг на друга, и позволяет их взаимодействию изменяться независимо. | да | Нет | Нет данных |
Memento | Не нарушая инкапсуляцию, захватите и извлеките внутреннее состояние объекта, позволяя объекту вернуться в это состояние позже. | да | Нет | Нет данных |
Нулевой объект | Избегайте нулевых ссылок, предоставляя объект по умолчанию. | Нет | Нет | Нет данных |
Наблюдатель или Опубликовать / подписаться | Определите зависимость между объектами "один ко многим", при которой изменение состояния одного объекта приводит к автоматическому уведомлению и обновлению всех его зависимых элементов. | да | да | Нет данных |
Слуга | Определите общую функциональность для группы классов. Шаблон слуги также часто называют реализацией вспомогательного класса или служебного класса для данного набора классов. Вспомогательные классы обычно не имеют объектов, поэтому у них есть все статические методы, которые действуют на различные типы объектов класса. | Нет | Нет | Нет данных |
Технические характеристики | Рекомбинантный бизнес-логика в Булево мода. | Нет | Нет | Нет данных |
государство | Разрешить объекту изменять свое поведение при изменении его внутреннего состояния. Объект изменит свой класс. | да | Нет | Нет данных |
Стратегия | Определите семейство алгоритмов, инкапсулируйте каждый из них и сделайте их взаимозаменяемыми. Стратегия позволяет алгоритму изменяться независимо от клиентов, которые его используют. | да | да | Нет данных |
Шаблонный метод | Определите скелет алгоритма в операции, отложив некоторые шаги до подклассов. Шаблонный метод позволяет подклассам переопределять определенные шаги алгоритма без изменения структуры алгоритма. | да | да | Нет данных |
Посетитель | Представляют собой операцию, выполняемую над элементами структуры объекта. Посетитель позволяет определить новую операцию, не изменяя классы элементов, с которыми она работает. | да | Нет | Нет данных |
Шаблоны параллелизма
имя | Описание | В POSA2[21] | Другой |
---|---|---|---|
Активный объект | Отделяет выполнение метода от вызова методов, которые находятся в их собственном потоке управления. Цель состоит в том, чтобы ввести параллелизм с помощью вызов асинхронного метода и планировщик для обработки запросов. | да | Нет данных |
Отказ | Выполняйте действие над объектом только тогда, когда объект находится в определенном состоянии. | Нет | Нет данных |
Связующие свойства | Объединение нескольких наблюдателей для принудительной синхронизации или согласования свойств разных объектов каким-либо образом.[22] | Нет | Нет данных |
Вычислить ядро | Одно и то же вычисление много раз параллельно, отличающееся целочисленными параметрами, используемыми с математикой без ветвления указателя в совместно используемых массивах, таких как GPU -оптимизированный Умножение матриц или Сверточная нейронная сеть. | Нет | Нет данных |
Двойная проверка блокировки | Уменьшите накладные расходы на получение блокировки, проверив сначала критерий блокировки («подсказку блокировки») небезопасным способом; только в том случае, если это удастся, будет действовать фактическая логика блокировки. Может быть небезопасным при реализации в некоторых сочетаниях языка и оборудования. Поэтому иногда его можно рассматривать антипаттерн. | да | Нет данных |
Асинхронный на основе событий | Решает проблемы с асинхронным шаблоном, возникающие в многопоточных программах.[23] | Нет | Нет данных |
Охраняемая подвеска | Управляет операциями, которые требуют как блокировки, так и выполнения предварительного условия перед выполнением операции. | Нет | Нет данных |
Присоединиться | Шаблон соединения обеспечивает способ написания параллельных, параллельных и распределенных программ путем передачи сообщений. По сравнению с использованием потоков и блокировок это модель программирования высокого уровня. | Нет | Нет данных |
Замок | Один поток устанавливает «блокировку» на ресурс, не позволяя другим потокам обращаться к нему или изменять его.[24] | Нет | PoEAA[15] |
Шаблон проектирования обмена сообщениями (MDP) | Позволяет обмениваться информацией (например, сообщениями) между компонентами и приложениями. | Нет | Нет данных |
Монитор объекта | Объект, методы которого подчиняются взаимное исключение, таким образом предотвращая ошибочные попытки использовать его одновременно несколькими объектами. | да | Нет данных |
Реактор | Объект реактора предоставляет асинхронный интерфейс для ресурсов, которые должны обрабатываться синхронно. | да | Нет данных |
Блокировка чтения-записи | Разрешает одновременный доступ для чтения к объекту, но требует монопольного доступа для операций записи. | Нет | Нет данных |
Планировщик | Явно контролируйте, когда потоки могут выполнять однопоточный код. | Нет | Нет данных |
Пул потоков | Для выполнения ряда задач создается несколько потоков, которые обычно организованы в очередь. Обычно задач гораздо больше, чем потоков. Можно рассматривать как частный случай пул объектов шаблон. | Нет | Нет данных |
Хранилище для конкретных потоков | Статическая или «глобальная» память, локальная для потока. | да | Нет данных |
Документация
Документация по шаблону проектирования описывает контекст, в котором используется шаблон, силы в контексте, которые шаблон пытается разрешить, и предлагаемое решение.[25] Не существует единого стандартного формата для документирования шаблонов проектирования. Скорее, разные авторы шаблонов использовали множество различных форматов. Однако, по мнению Мартин Фаулер, некоторые формы шаблонов стали более известными, чем другие, и, следовательно, стали общей отправной точкой для новых усилий по написанию шаблонов.[26] Одним из примеров широко используемого формата документации является формат, используемый Эрих Гамма, Ричард Хелм, Ральф Джонсон, и Джон Влиссидес в их книге Шаблоны проектирования. Он состоит из следующих разделов:
- Название и классификация паттерна: Описательное и уникальное имя, которое помогает идентифицировать шаблон и ссылаться на него.
- Намерение: Описание цели паттерна и причины его использования.
- Также известный как: Другие названия выкройки.
- Мотивация (силы): Сценарий, состоящий из проблемы и контекста, в котором можно использовать этот шаблон.
- Применимость: Ситуации, в которых можно использовать этот шаблон; контекст для шаблона.
- Структура: Графическое представление узора. Диаграммы классов и Диаграммы взаимодействия могут быть использованы для этой цели.
- Участники: Список классов и объектов, используемых в шаблоне, и их роли в дизайне.
- Сотрудничество: Описание того, как классы и объекты, используемые в шаблоне, взаимодействуют друг с другом.
- Последствия: Описание результатов, побочных эффектов и компромиссов, вызванных использованием шаблона.
- Реализация: Описание реализации паттерна; часть решения узора.
- Образец кода: Иллюстрация того, как шаблон можно использовать в языке программирования.
- Известные применения: Примеры реального использования паттерна.
- Связанные шаблоны: Другие паттерны, которые имеют некоторое отношение к паттерну; обсуждение различий между рисунком и похожими узорами.
Критика
Было замечено, что шаблоны проектирования могут быть просто признаком того, что некоторые функции отсутствуют в данном языке программирования (Ява или C ++ например). Питер Норвиг показывает, что 16 из 23 паттернов в Шаблоны проектирования книга (которая в основном ориентирована на C ++) упрощены или исключены (посредством прямой языковой поддержки) в Лисп или Дилан.[27] Соответствующие наблюдения были сделаны Ханнеманом и Кичалесом, которые реализовали несколько из 23 шаблонов проектирования с использованием аспектно-ориентированный язык программирования (AspectJ) и показал, что зависимости на уровне кода были удалены из реализаций 17 из 23 шаблонов проектирования и что аспектно-ориентированное программирование может упростить реализацию шаблонов проектирования.[28]Смотрите также Пола Грэма очерк «Месть ботаников».[29]
Неправильное использование шаблонов может излишне усложнять.[30]
Смотрите также
- Принцип абстракции
- Алгоритмический скелет
- Анти-шаблон
- Архитектурный образец
- Шаблоны отладки
- Шаблон дизайна
- Распределенные шаблоны проектирования
- Функция двойного шанса
- Структура архитектуры предприятия
- GRASP (объектно-ориентированный дизайн)
- Класс помощника
- Шаблон проектирования взаимодействия
- Список философий разработки программного обеспечения
- Список тем программной инженерии
- Язык шаблонов
- Теория паттернов
- Педагогические образцы
- Репозиторий портлендских паттернов
- Рефакторинг
- Методология разработки программного обеспечения
использованная литература
- ^ Ведьян, Фади; Абуфахер, Сомия (01.02.2020). «Влияние шаблонов проектирования на качество программного обеспечения: систематический обзор литературы». Программное обеспечение IET. 14 (1): 1–17. Дои:10.1049 / iet-sen.2018.5446. ISSN 1751-8806.
- ^ Смит, Рид (октябрь 1987 г.). Панель по методологии проектирования. OOPSLA '87 Приложение к материалам трудов. Дои:10.1145/62138.62151.
Уорд предостерег от необходимости слишком много программирования на, как он выразился, «высоком уровне волшебников». Он указал, что письменный «язык шаблонов» может значительно улучшить выбор и применение абстракций. Он предложил «радикальное изменение бремени проектирования и реализации», основываясь на новой методологии адаптации работы Кристофера Александера по языкам шаблонов и языков шаблонов, ориентированных на программирование, разработанных Tektronix значительно помогли им в разработке программного обеспечения.
- ^ Бек, Кент; Каннингем, Уорд (Сентябрь 1987 г.). Использование языков шаблонов для объектно-ориентированной программы. OOPSLA Мастерская 87 года по Спецификация и дизайн для объектно-ориентированного программирования. Получено 2006-05-26.
- ^ Барони, Алин Лусия; Генек, Янн-Гаэль; Альбин-Амио, Эрве (июнь 2003 г.). «Формализация паттернов дизайна». Нант: École Nationale Supérieure des Techniques Industrielles et des Mines de Nantes. CiteSeerX 10.1.1.62.6466. Цитировать журнал требует
| журнал =
(Помогите) - ^ Епископ Юдифь. «Шаблоны проектирования C # 3.0: используйте возможности C # 3.0 для решения реальных проблем». Книги по C # от O'Reilly Media. Получено 2012-05-15.
Если вы хотите ускорить разработку своих .NET-приложений, вы готовы к шаблонам проектирования C # - элегантным, общепринятым и проверенным способам решения общих проблем программирования.
- ^ Мейер, Бертран; Арноут, Карин (июль 2006 г.). "Компонентизация: пример посетителя" (PDF). IEEE Computer. 39 (7): 23–30. CiteSeerX 10.1.1.62.6082. Дои:10.1109 / MC.2006.227. S2CID 15328522.
- ^ Лааксо, Сари А. (16 сентября 2003 г.). «Коллекция шаблонов дизайна пользовательского интерфейса». Университет Хельсинки, факультет компьютерных наук. Получено 2008-01-31.
- ^ Heer, J .; Агравала, М. (2006). «Шаблоны проектирования программного обеспечения для визуализации информации». IEEE Transactions по визуализации и компьютерной графике. 12 (5): 853–60. CiteSeerX 10.1.1.121.4534. Дои:10.1109 / TVCG.2006.178. PMID 17080809. S2CID 11634997.
- ^ Догерти, Чад; Сэйр, Кирк; Сикорд, Роберт С.; Свобода, Давид; Тогаши, Казуя (2009). Шаблоны безопасного проектирования (PDF). Институт программной инженерии.
- ^ Гарфинкель, Симсон Л. (2005). Принципы и шаблоны проектирования компьютерных систем, которые одновременно являются безопасными и удобными (Кандидатская диссертация).
- ^ "Библиотека шаблонов дизайна Yahoo!". Архивировано из оригинал на 2008-02-29. Получено 2008-01-31.
- ^ «Как разработать свою бизнес-модель как экономичный стартап?». 2010-01-06. Получено 2010-01-06.
- ^ Шаблонные языки программирования, Материалы конференции (ежегодно, 1994-) [1]
- ^ а б c МакКоннелл, Стив (Июнь 2004 г.). «Дизайн в строительстве». Код завершен (2-е изд.). Microsoft Press. п.104. ISBN 978-0-7356-1967-8.
Таблица 5.1 Популярные шаблоны дизайна
- ^ а б Фаулер, Мартин (2002). Паттерны архитектуры корпоративных приложений. Эддисон-Уэсли. ISBN 978-0-321-12742-6.
- ^ К. Мартин, Роберт (2002). «28. Объект расширения». Гибкая разработка программного обеспечения, принципы, шаблоны и практики. п.408. ISBN 978-0135974445.
- ^ Алур, Дипак; Крапи, Джон; Малкс, Дэн (2003). Базовые шаблоны J2EE: передовой опыт и стратегии проектирования. Prentice Hall. п. 166. ISBN 978-0-13-142246-9.
- ^ Фаулер, Мартин (2002). Паттерны архитектуры корпоративных приложений. Эддисон-Уэсли. п. 344. ISBN 978-0-321-12742-6.
- ^ Блох, Джошуа (2008). «Правило 37: Используйте интерфейсы маркеров для определения типов». Эффективная Java (Второе изд.). Эддисон-Уэсли. п.179. ISBN 978-0-321-35668-0.
- ^ «Двойник - шаблон проектирования для моделирования множественного наследования» (PDF).
- ^ Schmidt, Douglas C .; Сталь, Михаил; Ронерт, Ганс; Бушманн, Франк (2000). Шаблонно-ориентированная архитектура программного обеспечения, Том 2: Шаблоны для параллельных и сетевых объектов. Джон Вили и сыновья. ISBN 978-0-471-60695-6.
- ^ Свойства привязки
- ^ Нагель, Кристиан; Эвьен, Билл; Глинн, Джей; Уотсон, Карли; Скиннер, Морган (2008). «Асинхронный шаблон на основе событий». Профессиональный C # 2008. Вайли. С. 570–571. ISBN 978-0-470-19137-8.
- ^ Шаблон блокировки
- ^ Габриэль, Дик. "Определение шаблона". Архивировано из оригинал на 2007-02-09. Получено 2007-03-06.
- ^ Фаулер, Мартин (2006-08-01). «Написание шаблонов программного обеспечения». Получено 2007-03-06.
- ^ Норвиг, Питер (1998). Шаблоны проектирования на динамических языках.
- ^ Ханнеманн, Ян; Кичалес, Грегор (2002). Реализация шаблона проектирования в Java и AspectJ. OOPSLA '02. Дои:10.1145/582419.582436.CS1 maint: location (ссылка на сайт)
- ^ Грэм, Пол (2002). Месть ботаников. Получено 2012-08-11.
- ^ МакКоннелл, Стив (2004). Код завершен: Практическое руководство по созданию программного обеспечения, 2-е издание. п.105.
дальнейшее чтение
- Александр, Кристофер; Исикава, Сара; Сильверштейн, Мюррей; Якобсон, Макс; Фиксдаль-Кинг, Ингрид; Ангел, Шломо (1977). Язык шаблона: Города, Здания, Строительство. Нью-Йорк: Издательство Оксфордского университета. ISBN 978-0-19-501919-3.
- Алур, Дипак; Крапи, Джон; Малкс, Дэн (май 2003 г.). Базовые шаблоны J2EE: передовой опыт и стратегии проектирования (2-е изд.). Prentice Hall. ISBN 978-0-13-142246-9.
- Бек, Кент (Октябрь 2007 г.). Шаблоны реализации. Эддисон-Уэсли. ISBN 978-0-321-41309-3.
- Бек, Кент; Crocker, R .; Meszaros, G .; Коплиен, Дж. О.; Dominick, L .; Paulisch, F .; Влиссидес, Дж. (Март 1996 г.). Материалы 18-й Международной конференции по программной инженерии. С. 25–30.
- Борхерс, Янв (2001). Паттерн-подход к дизайну взаимодействия. Джон Уайли и сыновья. ISBN 978-0-471-49828-5.
- Коплиен, Джеймс О.; Шмидт, Дуглас К. (1995). Шаблонные языки разработки программ. Эддисон-Уэсли. ISBN 978-0-201-60734-5.
- Коплиен, Джеймс О.; Влиссидес, Джон М.; Керт, Норман Л. (1996). Шаблонные языки разработки программ 2. Эддисон-Уэсли. ISBN 978-0-201-89527-8.
- Элоранта, Вели-Пекка; Коскинен, Йоханнес; Леппянен, Марко; Рейхонен, Вилле (2014). Проектирование распределенных систем управления: подход на языке шаблонов. Вайли. ISBN 978-1118694152.
- Фаулер, Мартин (1997). Шаблоны анализа: многоразовые объектные модели. Эддисон-Уэсли. ISBN 978-0-201-89542-1.
- Фаулер, Мартин (2003). Паттерны архитектуры корпоративных приложений. Эддисон-Уэсли. ISBN 978-0-321-12742-6.
- Фриман, Эрик; Фриман, Элизабет; Сьерра, Кэти; Бейтс, Берт (2004). Шаблоны проектирования Head First. O'Reilly Media. ISBN 978-0-596-00712-6.
- Хоманн, Люк; Фаулер, Мартин; Кавасаки, Гай (2003). Помимо программной архитектуры. Эддисон-Уэсли. ISBN 978-0-201-77594-5.
- Габриэль, Ричард (1996). Паттерны программного обеспечения: рассказы сообщества разработчиков программного обеспечения (PDF). Oxford University Press. п. 235. ISBN 978-0-19-512123-0. Архивировано из оригинал (PDF) на 2003-08-01.
- Гамма, Эрих; Хелм, Ричард; Джонсон, Ральф; Влиссидес, Джон (1995). Паттерны проектирования: элементы объектно-ориентированного программного обеспечения многократного использования. Эддисон-Уэсли. ISBN 978-0-201-63361-0.
- Хохпе, Грегор; Вульф, Бобби (2003). Шаблоны корпоративной интеграции: проектирование, создание и развертывание решений для обмена сообщениями. Эддисон-Уэсли. ISBN 978-0-321-20068-6.
- Голуб, Аллен (2004). Голуб на выкройках. Apress. ISBN 978-1-59059-388-2.
- Кирхер, Майкл; Фёльтер, Маркус; Здун, Уве (2005). Шаблоны удаленного взаимодействия: основы межплатформенного программного обеспечения для предприятий, Интернета и распределенных объектов в реальном времени. Джон Уайли и сыновья. ISBN 978-0-470-85662-8.
- Ларман, Крейг (2005). Применение UML и шаблонов. Prentice Hall. ISBN 978-0-13-148906-6.
- Лисков, Варвара; Гуттаг, Джон (2000). Разработка программ на Java: абстракция, спецификация и объектно-ориентированный дизайн. Эддисон-Уэсли. ISBN 978-0-201-65768-5.
- Манолеску, Драгош; Voelter, Маркус; Благородный, Джеймс (2006). Шаблонные языки разработки программ 5. Эддисон-Уэсли. ISBN 978-0-321-32194-7.
- Маринеску, Флойд (2002). Шаблоны проектирования EJB: расширенные шаблоны, процессы и идиомы. Джон Уайли и сыновья. ISBN 978-0-471-20831-0.
- Мартин, Роберт Сесил; Риле, Дирк; Бушманн, Франк (1997). Языки шаблонов проектирования программ 3. Эддисон-Уэсли. ISBN 978-0-201-31011-5.
- Mattson, Timothy G; Сандерс, Беверли А .; Массингилл, Берна Л. (2005). Шаблоны для параллельного программирования. Эддисон-Уэсли. ISBN 978-0-321-22811-6.
- Шеллоуэй, Алан; Тротт, Джеймс Р. (2001). Объяснение шаблонов дизайна, второе издание: новый взгляд на объектно-ориентированный дизайн. Эддисон-Уэсли. ISBN 978-0-321-24714-8.
- Влиссидес, Джон М. (1998). Штриховка по образцу: применение шаблонов проектирования. Эддисон-Уэсли. ISBN 978-0-201-43293-0.
- Weir, Чарльз; Благородный, Джеймс (2000). Программное обеспечение с малой памятью: шаблоны для систем с ограниченной памятью. Эддисон-Уэсли. ISBN 978-0-201-59607-6. Архивировано из оригинал 17 июня 2007 г.