Я пытаюсь обучить своих коллег в области шаблонов проектирования. Некоторые из оригинальных шаблонов «Банды четырех» немного эзотеричны, поэтому мне интересно, есть ли подгруппа «существенных» шаблонов, которые должны знать все программисты. Просматривая список, я думаю, что, вероятно, использовал -
- Абстрактная Фабрика
- Заводской метод
- одиночка
- Мост
- Фасад
- команда
Какие из них вы фактически используете на практике, и для чего вы их используете?
design-patterns
Крейг Шварц
источник
источник
for, if, while...
т. д.» - трудно измерить, насколько это бессмысленно.Ответы:
Вот список тех, которые я использовал или видел на практике:
Singleton - Объект приложения в ASP.Net, являющийся ярким примером этого.
Адаптер. Подключение к базам данных обычно может включать класс Адаптер, по крайней мере, в моей области .Net.
Factory - Общий для генерации объектов, хотя я видел это больше в некоторых старых классических ASP в те времена.
Стратегия - у меня было приложение, которое для каждого типа устройства имело схожую структуру для класса, которую я бы рассмотрел в качестве реализации этого шаблона.
Фасад - в некотором смысле это похоже на шаблон адаптера с точки зрения того, что он обычно связывает несколько систем.
источник
Авторы составили образцы из наблюдаемых дизайнов, которые они нашли в реальных приложениях. Никто не может использовать их все, но все они используются.
источник
Декоратор .
РЕДАКТИРОВАТЬ : почти в каждом проекте, который выходит за рамки «тривиальной» стадии, каждый заканчивается интерфейсом IAction (детали могут отличаться):
Следующий час я трачу на написание множества маленьких, почти тривиальных классов, которые реализуют IAction. В сочетании они очень мощные и гибкие.
Например,
LogAction
(написать для регистрации и выполнить IAction),NullAction
(ничего не делать и вернуть true),ActionList
(выполнить список IActions и вернуть ANDing для bool). В некоторых случаяхAndAction
(имеет смысл возвращать AND двух разных действий, может быть короткое замыкание или нет)OrAction
, такжеNotAction
имеет смысл.Хотя технически из приведенных выше примеров только LogAction является декоратором (другие не работают точно с 1 IAction), я все же считаю это обобщением шаблона Decorator, когда я создаю ActionList из LogActions of IActions.
источник
Я предполагаю, что вы хотите ограничить вопрос использованием шаблонов в собственном коде / проектах (без библиотек классов и сторонних фреймворков).
Как и другие, я также чаще всего использовал шаблоны фабрики . потом
источник
Я использовал многие другие, которые уже были упомянуты (Singleton, Factory, Builder, Command, Strategy и т. Д.)
Один из тех, кого я еще не упоминал, это Flyweight, который я часто использую. Ниже приведен пример реализации:
источник
Большинство оригинальных паттернов Gang of Four все еще используются сегодня, но есть и другие, которые сейчас популярны, которых нет в книге.
Найдите ссылку на Design Patters на языке, который вы используете. Они, как правило, более конкретны и используют специфические языковые возможности для реализации шаблонов более лаконичным и элегантным способом.
Три отличных ресурса для Шаблонов проектирования:
Книга "Head First Design Patterns" - язык выбора - Java, но он актуален для всех языков. Шаблоны проектирования dofactory - отличные и бесплатные объяснения шаблонов .net с кодом. PluralSight - библиотека шаблонов проектирования - эта программа платная, но слишком хороша, чтобы не включать ее в список.
источник
Хорошо, если вы используете общие библиотеки, такие как ACE, вы в конечном итоге используете больше, чем вы думаете. Я широко использую Observer / Observable :-)
источник
Я использовал Builder по крайней мере один раз (тот же процесс конвертера мог построить вывод HTML или Excel).
Я часто использую Template Template (для задач, связанных с JDBC, или абстрактных контроллеров Swing).
Однажды мне пришлось разработать множество новых функций в приложении на основе форм, что было беспорядком. Я смог продвинуться только после того, как реорганизовал существующий материал в решение на основе шаблонов состояний. (Ну большая часть этого).
Я также часто использую команды (Swing Actions) и Observers.
Однажды я использовал Mememento-подобное решение для обнаружения изменений в формах Swing. Форма будет сериализовать свое состояние, которое я сравнивал (равно ()) с более ранними состояниями.
источник
Я думаю, что у меня есть большинство из них через мою карьеру. я уверен, что не использовал только один шаблон адаптера, который реализован с множественным наследованием в книге, поскольку я не большой поклонник множественного наследования.
источник
Я люблю Декоратор. Единственное, что я могу добавить к упомянутым, это Proxy.
источник