Когда какой шаблон проектирования использовать? [закрыто]

104

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

Вот почему я задаю этот вопрос. Существуют ли какие-либо рекомендации / сигналы тревоги, когда использовать какой шаблон дизайна.

Например, если вы используете оператор switch, чтобы определить, какой объект вам нужно создать, вы, вероятно, захотите использовать шаблон проектирования фабрики. Таким образом, оператор switch в этом случае является «сигнальным звонком» для использования шаблона Factory.

Итак, знаете ли вы больше «тревожных звонков» для определения шаблона проектирования?

Мартейн
источник
6
Обычно описания шаблонов, которые я вижу, включают в себя описание ситуаций, в которых вы хотели бы использовать этот шаблон проектирования.
Р. Мартиньо Фернандес

Ответы:

99

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

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

Джоп Килларс
источник
23
Не только структурные проблемы, но также поведенческие и творческие проблемы.
DevDemon
1
Шаблоны проектирования могут ускорить процесс разработки, предоставляя проверенные, проверенные парадигмы разработки. Эффективный дизайн программного обеспечения требует рассмотрения вопросов, которые могут не проявиться до конца реализации. Повторное использование шаблонов проектирования помогает предотвратить тонкие проблемы, которые могут вызвать серьезные проблемы, и улучшает читаемость кода для программистов и архитекторов, знакомых с шаблонами.
SaddamBinSyed 05
5

Изучите их, и постепенно вы сможете переосмыслить и понять, когда их использовать. Начните с чего-нибудь простого, например, шаблона singleton :)

если вы хотите создать один экземпляр объекта и только ОДИН. Вы используете шаблон singleton. Допустим, вы создаете программу с объектом параметров. Вам не нужно несколько таких, это было бы глупо. Синглтон гарантирует, что никогда не будет больше одного. Шаблон Singleton прост, используется много и действительно эффективен.

Питер Расмуссен
источник
17
Синглтон на самом деле не подходит, когда вам нужен только один экземпляр. Синглтон предназначен для случаев, когда вам нужно ограничиться одним экземпляром. Если вам нужен только один экземпляр, вы можете попробовать просто создать только один экземпляр и использовать его.
Р. Мартиньо Фернандес
Кроме того, хотя синглтон очень полезен и необходим в некоторых местах, его также очень легко реализовать, когда в нем нет необходимости. Как вы здесь намекаете, и как указал Фернандес, вам это, вероятно, не нужно. Собственно говоря, использование одноэлементного шаблона - хороший признак возможных (вероятно) запахов кода. Использование его для класса обслуживания - это скорее запах кода. Похоже, вам нужен DI, а не синглтон. Некоторые люди так их и используют. Особенно для небольшого (неважного) кода или POC. Но, как я уже сказал, есть несколько эффективных применений. Не ищите простой способ что-то сделать, просто делайте это.
Suamere
4

Я полностью согласен с @Peter Rasmussen.

Шаблоны проектирования обеспечивают общее решение часто возникающих проблем проектирования.

Я хотел бы, чтобы вы следовали приведенному ниже подходу.

  1. Понять цель каждого шаблона
  2. Ознакомьтесь с контрольным списком или вариантом использования каждого шаблона
  3. Подумайте о решении вашей проблемы и проверьте, попадает ли ваше решение в контрольный список определенного шаблона
  4. Если нет, просто игнорируйте шаблоны проектирования и напишите собственное решение.

Полезные ссылки:

создание исходного кода : красиво объясняет намерения , структуру и контрольный список на нескольких языках, включая C ++ и Java

wikipedia : Объясняет структуру, диаграмму UML и рабочие примеры на нескольких языках, включая C # и Java.

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

Равиндра бабу
источник