Разница между паттерном и принципом

20

Чем отличаются объектно-ориентированные шаблоны проектирования и принципы? Это разные вещи? Насколько я понял, они оба пытаются достичь какой-то общей цели (например, гибкость). Так могу ли я сказать, что паттерн - это принцип, и наоборот?

Принцип проектирования = SOLID (т.е. принцип инверсии зависимости)

Шаблон проектирования = Gof (т.е. абстрактный шаблон фабрики)

Чанди Гором
источник

Ответы:

24

Нет, они не одинаковы.

Шаблоны являются распространенным решением проблем объектно-ориентированного программирования . (Я не знаю ни одной подобной книги по функциональному или декларативному программированию.) Идея была воплощена в знаменитой книге «Шаблоны проектирования» «Бандой четырех» в 1995 году.

Как указывает Андре, шаблоны являются общими в каждой парадигме. Я повторю свое предыдущее утверждение: я не знаю ни одной подобной книги по функциональному или декларативному программированию, но Андре исправил мое невежество с помощью ссылки, которую он предоставил ниже. (Спасибо, Андре.)

Принципы меньше касаются конкретных языков или парадигм, более общие. «Не повторяйся сам» - принцип «СУХОЙ» - справедлив для всех программ.

duffymo
источник
4
Шаблоны существуют в каждой парадигме. Джереми Gibbons пишет книгу под названием Шаблоны в функциональное программирование (и ведение блога об этом здесь ). Шаблоны - это то, что говорит название - повторяющиеся дизайны, которые решают аналогичные проблемы. Они повсюду », хотя вы не всегда можете их узнать.
Андре Парамес
@ AndréParamés Быстрый просмотр заставляет меня поверить, что Джереми Гиббонс говорит о языковых идиомах , а не о шаблонах дизайна.
Изката
19

Эти понятия не одинаковы:

* Принцип разработки: * Принципы разработки программного обеспечения представляют собой набор руководящих принципов, которые помогают нам избежать плохого дизайна. как: принцип Open Close

* Шаблон проектирования: * Шаблон проектирования - это общее решение для повторного использования часто встречающейся проблемы в данном контексте при разработке программного обеспечения. Как: Синглтон

Дженнифер С
источник
7

Шаблоны относятся к принципам, а реализации - к шаблонам.

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

K ..
источник
3

Ну, Принципы - это правила, а шаблоны - их конкретные примеры.

Ahmad
источник
1
Вы можете привести несколько примеров?
Пожалуйста, расскажите нам принцип, который требует фабрики или цепи ответственности или Flyweight.
duffymo
2
Например, @duffymo Well Factory следует принципу инверсии зависимости (не закачке); и клиент, и экземпляр зависят от абстракции - интерфейса. Цепочка ответственности основана на принципах слабой связи и разделения контроллеров. Мухи весят, я считаю, имеет только прирост производительности.
m3th0dman
3

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

Е.Г. Давайте посмотрим на шаблон стратегии. Он определяет семейство алгоритмов, инкапсулирует каждый и делает их взаимозаменяемыми. Итак, у вас есть концепция алгоритма высокого уровня. С государственной моделью у вас есть концепция государства на высоком уровне. С принципами у вас нет концепций высокого уровня. Принципы - это строительные блоки, которые используются скороговорками для достижения цели. Когда вы реализуете шаблон стратегии, вы используете SOLID:

  • SRP - вы определяете код, который отвечает за алгоритм и извлекаете его из другого кода.
  • OCP - вы определяете абстракцию, которая представляет все разные алгоритмы и используете ее
  • LSP - вы не используете конкретные классы алгоритмов в клиентском коде, только абстракция
lazyberezovsky
источник
5
На самом деле шаблоны имеют более низкий уровень, чем принципы. То есть шаблон в этом контексте ближе к реальной реализации, чем принцип. Другими словами, принципы являются более абстрактными, чем шаблоны с принципами, означающими общие руководящие принципы проектирования и шаблоны, представляющие решения, подходящие для определенного класса проблем.
@ Ярко, посмотри на мой пример. Когда я говорил об уровне, я имел в виду, что шаблоны основаны на принципах, а не наоборот. Кирпич - вещь не более высокого уровня, чем строительная.
4
Я понимаю, что вы имели в виду под этим, и понимаю ваше мышление по этому вопросу. Это, однако, противоречит общему значению понятий «высокий уровень» и «низкий уровень» в контексте программного обеспечения. (По какой-то причине я не могу пометить вас.)
1
«Шаблоны - это вещи более высокого уровня, чем принципы». Я позволю себе не согласиться ==> Шаблон близок к реализации (т.е. низкий уровень), в то время как принцип - это правило высокого уровня.
Рауль
2

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

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

Принципы не охватывают реализацию, хотя могут быть стандартные подходы к реализации. Принципы больше касаются общих вопросов, а не конкретных проблем. Для Inversion of Control мне известны как минимум три подхода к реализации. Что касается СУХОГО (не повторяйте себя), я не знаю ни одного конкретного подхода к реализации, хотя я использую несколько.

Рассмотреть возможность

  • Вас попросили использовать шаблон, подобный шаблону абстрактной фабрики, в качестве единственного подхода для разработки программы. Было бы это уместно? Нет, тогда это скорее паттерн.
  • Вас попросили применить СУХОЙ ко всем компонентам? Будет ли это уместно? Да, тогда это скорее будет Принцип.
BillThor
источник
1

Принцип дизайна ОО

Принцип ОО - это набор руководящих принципов, обеспечивающих концепцию ООП. Основываясь на концепции ООП, это определяет пути лучшего дизайна, лучшего дизайна. Основной принцип дизайна ОО - ТВЕРДЫЙ.

Шаблон проектирования обеспечивает общее решение проблемы проектирования. Обратите внимание, что «шаблон дизайна» может быть применен и к объектному слову в полдень Таким образом, шаблоны проектирования ООП (OODP) - это те, которые обеспечивают общее решение принципа ОО на основе объектно-ориентированного проектирования. Шаблоны проектирования открыты, а не изобретены. Существует несколько способов определения OODP, и наиболее известным из них является BSC [Behavioral Structural Creational].

Ниже приведена ссылка для подробного объяснения. http://techythought.wordpress.com/2013/01/21/design-principle-vs-ds-design-pattern-describing-oop-elements/

Tanzy
источник