Design pattern

В программной инженерии шаблон проектирования – это общее повторяемое решение часто встречающейся проблемы при разработке программного обеспечения. Шаблон проектирования – это не законченный дизайн, который можно преобразовать непосредственно в код. Это описание или шаблон решения проблемы, который можно использовать во многих различных ситуациях.

Использование шаблонов дизайна

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

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

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

Шаблоны творческого проектирования

Все эти шаблоны проектирования касаются создания экземпляров классов. Этот шаблон можно далее разделить на шаблоны создания классов и шаблоны создания объектов. В то время как шаблоны создания классов эффективно используют наследование в процессе создания экземпляров, шаблоны создания объектов эффективно используют делегирование для выполнения работы.

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

Структурные шаблоны проектирования

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

  • Адаптер
    Match интерфейсов разных классов
  • Мост
    отделяет интерфейс объекта от его реализации
  • Составной
    Древовидная структура простых и составных объектов.
  • Декоратор
    Динамическое добавление обязанностей к объектам
  • Фасад
    Единый класс, представляющий всю подсистему
  • Легковес
    Мелкозернистый экземпляр, используемый для эффективного обмена
  • Данные частного класса
    ограничивают доступ к средствам доступа / мутаторам
  • Прокси
    Объект, представляющий другой объект

Поведенческие шаблоны проектирования

Все эти шаблоны проектирования связаны с взаимодействием объектов Class. Поведенческие паттерны – это те паттерны, которые наиболее конкретно связаны с общением между объектами.

  • Цепочка ответственности
    Способ передачи запроса между цепочкой объектов
  • Команда
    Инкапсулирует запрос команды как объект
  • Интерпретатор
    Способ включения языковых элементов в программу
  • Итератор
    Последовательный доступ к элементам коллекции
  • Посредник
    Определяет упрощенное взаимодействие между классами
  • Memento
    Захват и восстановление внутреннего состояния объекта
  • Нулевой объект
    Предназначен для использования в качестве значения объекта по умолчанию
  • Наблюдатель
    Способ уведомления об изменении ряда классов
  • Состояние
    Изменение поведения объекта при изменении его состояния
  • Стратегия
    инкапсулирует алгоритм внутри класса
  • Шаблонный метод
    Отложите точные шаги алгоритма на подкласс
  • Посетитель
    Определяет новую операцию для класса без изменений

Критика

Концепция шаблонов проектирования подвергалась критике со стороны некоторых специалистов в области информатики.

Нацелен на неправильную проблему

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

Питер Норвиг приводит аналогичный аргумент. Он демонстрирует, что 16 из 23 шаблонов в книге Design Patterns (которая в основном ориентирована на C ++) упрощены или устранены (посредством прямой языковой поддержки) в Lisp или Dylan.

Отсутствие формальных основ

Изучение шаблонов проектирования было чрезмерно спонтанным, и некоторые утверждали, что эту концепцию срочно необходимо поставить на более формальную основу. На OOPSLA 1999 «Банда четырех» (при их полном сотрудничестве) предстала перед показательным судом, в ходе которого они были «обвинены» в многочисленных преступлениях против информатики. Они были «осуждены» ⅔ из «присяжных», присутствовавших на суде.

Приводит к неэффективным решениям

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

Существенно не отличается от других абстракций

Некоторые авторы утверждают, что шаблоны проектирования существенно не отличаются от других форм абстракции и что использование новой терминологии (заимствованной из архитектурного сообщества) для описания существующих явлений в области программирования не требуется. Парадигма модель-представление-контроллер рекламируется как пример «шаблона», который на несколько лет предшествует концепции «шаблонов проектирования». Некоторые также утверждают, что основным вкладом сообщества шаблонов проектирования (и книги «Банда четырех») было использование языка шаблонов Александра в качестве формы документации; практика, которая часто игнорируется в литературе.

Добавить комментарий

Ваш адрес email не будет опубликован.