что такое шаблоны проектирования и как это может повысить производительность программирования? - PullRequest
1 голос
/ 04 июля 2010

Я читал различные стили программирования, такие как XP (сначала пишу тест), и наткнулся на книгу по Java, в которой есть только шаблоны проектирования, что похоже на псевдокоды.используется для ?что такое дизайн apttern в контексте программирования и каковы его приложения?Это как чертежи для создания приложения для конкретного домена?

Ответы [ 6 ]

6 голосов
/ 04 июля 2010

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

Если вы посмотрите на проектирование, например, шаблон дизайна может быть "колесом". Может быть много разных видов колес, но есть общее представление о «колесе», которое остается прежним.

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

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

4 голосов
/ 04 июля 2010

Шаблон проектирования - это многократно используемое решение часто встречающейся проблемы проектирования. На самом деле, мы можем обобщить следующее: Шаблон - это общее многократно используемое решение часто встречающейся проблемы. Существуют не только шаблоны проектирования, но и шаблоны кодирования (хотя мы их так не называем, мы называем их идиомами), шаблоны архитектуры, шаблоны взаимодействия с пользователем, шаблоны процессов и т. Д.

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

Итак, альтернативное определение может быть следующим: Шаблон - это Программа, которую вы не можете написать, потому что ваш язык программирования слишком слаб для его выражения.

Итак, в общем, вы должны попытаться использовать лучший язык программирования, прежде чем пытаться использовать паттерн. Однако дизайн языка программирования - это все компромиссы: просто невозможно создать язык программирования, который может одинаково хорошо выражать все проблемы. Итак, иметь несколько шаблонов проектирования в вашем коде - это прекрасно, но их не должно быть много, и определенно не должно быть шаблонов в основной бизнес-логике. Это признак того, что вы выбрали неправильный язык программирования, и никакой шаблон не может это исправить.

Вот пример: в программировании на ассемблере параметрическая часть поведения, разделяемая между различными частями программы, является распространенной проблемой проектирования. И есть шаблон дизайна, который решает эту проблему: он называется подпрограммой. Но на другом языке, и практически во всех современных языках, подпрограммы (иногда называемые процедурами, функциями, методами, подпрограммами, подпрограммами) встроены прямо в язык. Они не Образцы, они просто там, и никто даже не думает о них больше. Итак, если в вашем коде всего одна или две подпрограммы, это нормально. Но если у вас их много, сборка, вероятно, не правильный выбор.

Некоторые другие примеры. В языке ОО на основе прототипа встроен шаблон прототипа. В языке с множественной диспетчеризацией встроен шаблон посетителя. В Ruby нет конструкторов, вы всегда используете фабричные методы без думая об этом. В основанных на делегировании языках OO встроен Шаблон Decorator. В языках с процедурами более высокого порядка встроен Шаблон Iterator. В языках без изменяемого состояния Шаблон Iterator на самом деле является Antipattern .

1 голос
/ 04 июля 2010

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

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

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

В 1994 году «Банде четырех» (Эрих Гамма, Ричард Хелм, Ральф Джонсон и Джон Влиссидес) пришла идея собрать такие повторяющиеся шаблоны и опубликовать их в книге, которую они назвали «Шаблоны проектирования».

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

1 голос
/ 04 июля 2010

Вы правильно понимаете, когда называете шаблоны проектирования «голубыми отпечатками».

Это «стандартный» способ решения проблем, который вы можете адаптировать к вашим обстоятельствам.Полное описание шаблона должно включать случаи ребра / угла, чтобы вам было проще кодировать свое решение.

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

Это не «серебряная пуля», которая напишет ваш код для вас.

0 голосов
/ 05 июля 2010

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

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

Посмотрите следующую ссылку для определений GOF

http://www.dofactory.com/Patterns/Patterns.aspx

Затем посмотрите на паттерны Мартина Фаулерса Предприятия и Боба Мартина`Твердые принципы (хотя они и не являются шаблонами сами по себе, они являются хорошей основой для подражания.

0 голосов
/ 04 июля 2010

Разработка через тестирование, которую вы использовали в качестве примера, на самом деле не является «шаблоном проектирования».

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

Возможно, вы захотите запустить поиск в Google для «Банды четырех», которая написала учебник по шаблонам проектирования (найдено здесь ).

...