

Нет, это о книгах DP, и эта ветка посвящена конкретным шаблонам.
На ум приходит «Интерпретатор» и «Легковес» из книги «Банда четырех».
Я считаю Bridge и Mediator мощными и глубокими шаблонами в наборе инструментов разработчика SW.
Это скорее антипаттерн, но я видел то, что я называю паттерном «Держи все в одном месте». Это было большое приложение, в котором все переменные, которые не были локальными, для каждого класса, КАЖДОГО класса, хранились в одном классе с именем P (для параметров). Кстати, все статические переменные хранились в классе под названием ... подождите ... S.
Как бы то ни было, этот проект разросся, и вдруг ничего не вышло. (Меня наняли примерно в это время). Удивительно, но программа не аварийно завершила работу, у нее просто было множество побочных эффектов, из-за которых приложение работало плохо. Как вы можете себе представить, несколько потоков, все из которых обращаются к P и изменяют переменные, без блокировок или синхронизации.
Говорю вам, это было действительно зрелище.
Компания открыла новый офис и наняла в него 3 человек, в том числе я. Нам дали программу и сказали исправить ее. Мы целыми днями сидели и хлопали себя по лбу. Теперь у меня на лице постоянный отпечаток ладони.
Прочие приколы ... переменная с именем "fudgeFactor". До сих пор не знаю, что это произошло.
Метод получения следующего символа ascii ...
char getNextChar(char previous) {
switch (previous)
case 'a': return b;
case 'b': return c;
...
case 'z': return a;
}
В любом случае, это мой забавный образец ... с добавлением некоторой дополнительной забавности.
Посетитель впервые поразил меня, когда я работал над насыщенной графами программой, как очень элегантный способ выполнять операции со сложными структурами.
Помимо mvc (который сам по себе не является паттерном), это «король шаблонов» в том, что касается его сложности и потенциала для решения проблем.
Свободный интерфейс Фаулера - довольно интересный паттерн. У меня всегда была слабость к абстрактным фабрикам, стратегиям и государственному паттерну.
Если можно, я недавно кодифицировал «шаблон», который я назвал Шаблон класса друзей, который некоторые могут найти интересным или полезным для ограничения видимости частных средств доступа к полям в языках, которые не имеют классов друзей в стиле C++.
Хм, свободно. Linq создан для этого.
Не знаю, можно ли описать Linq как свободный интерфейс. По моему опыту, свободно работающие интерфейсы обычно проектируются так, чтобы звонки можно было читать как английскую фразу. Методы свободного интерфейса часто чрезвычайно отслеживают состояние - вызов одного и того же метода в разное время дает совершенно разные результаты. Linq - это больше о создании конвейера, который будет использоваться для обработки набора данных. Ни один из методов Linq не изменяет состояние - они просто возвращают новый объект. И методы Linq кажутся мне больше "методом", чем "фразой". Но это только мое мнение.
Самый интересный шаблон дизайна, который вы когда-либо встретите, - это шаблон, который вы создали сами по понятным причинам.
Нельзя сказать, что это будет лучший шаблон дизайна, просто самый интересный.
Не я. Как только я что-то создал, даже если я очень этим горжусь, это становится тривиальным и, следовательно, совершенно неинтересным. Интересны вещи, с которыми я еще не знаком.
Я никогда не видел смысла паттерна Visitor, пока мне не пришлось напрямую манипулировать байт-кодом Java с помощью библиотеки КАК М. Удивительно, насколько этот шаблон упростил то, что в противном случае было бы действительно сложной задачей.
Этот шаблон также используется в большинстве IDE Java, когда вы хотите написать свой собственный плагин рефакторинга. Вы предоставляете объект Visitor, и он передается AST для внесения необходимых изменений.
Программное обеспечение только для сбоев: http://www.usenix.org/events/hotos03/tech/full_papers/candea/candea_html/ Абстрактный
Программы, работающие только со сбоями, безопасно завершают работу и быстро восстанавливаются. Есть только один способ остановить такое программное обеспечение - вывести его из строя - и только один способ запустить его - инициировать восстановление. Системы, работающие только с аварийным завершением работы, построены из компонентов, работающих только с аварийным завершением работы, и использование прозрачных повторных попыток на уровне компонентов скрывает сбои внутрисистемных компонентов от конечных пользователей. В этой статье мы защищаем дизайн Интернет-систем только от сбоев, показывая, что это может привести к более надежному, предсказуемому коду и более быстрому и эффективному восстановлению. Мы представляем идеи о том, как создать такие Интернет-сервисы, работающие только в случае сбоев, доводя успешные методы до их логической крайности.
Не столько шаблон, сколько внедрение зависимостей и инверсия управления
В течение последнего года я занимался обслуживанием приложения Windows, написанного на LANSA, где фокус управляется установкой всех элементов управления на tabStop = false, за исключением двух скрытых кнопок (PrevFocus и NextFocus). Когда форма загружается, фокус устанавливается на поле, и имя этого поля сохраняется в переменной отслеживания (называемой «FocusField»). Когда пользовательские вкладки (или Shift-вкладки) меняют фокус, запускается событие GotFocus соответствующей кнопки. Внутри этой функции находится оператор case (выберите case FocusField). На основе текущего поля, в котором находится фокус, запускается логика проверки и, возможно, фокус переходит на другое поле.
События GotFocus для большинства элементов управления смотрят, каково текущее значение FocusField, а затем вызывают функцию LostFocus, которая выполняет тот же оператор case для FocusField, так что ранее сфокусированное поле будет проверено.
Как вы, наверное, догадались, из-за этого невозможно отделить пользовательский интерфейс от логики, и поддерживать это становится невероятно трудной задачей. Переписывание этих форм с использованием простого метода Validate, который проверяет ВСЕ входные данные и позволяет обычным свойствам табуляции (TabOrder, TabStop и т. д.) Творить чудеса, обычно приводит к сокращению кода на 50% и значительно более надежным формам.
Я понятия не имею, откуда возник этот шаблон, хотя, возможно, он был придуман программистами RPG / зеленого экрана, превратившимися в разработчиков WinForms, которые написали приложение.
Я помню, как впервые прочитал о модель наилегчайшего веса в GOF. В качестве примера они используют текстовый процессор; они указывают на недостатки использования независимого объекта для представления каждого символа. Этот паттерн-легковес поощряет отделение разделяемого, внутреннего, неизменяемого состояния от не подлежащего совместному использованию, внешнего, изменяемого состояния. Для меня в то время это было одно из тех «Ага!» моменты, которые действительно расширили мой кругозор и повлияли на мой дизайн по сей день.
Один мой друг предположил, что паттерн Стратегия - это, по сути, паттерн-прародитель. Многие другие шаблоны (Мост, Декоратор, Прокси, Состояние, ...) - это просто более совершенные приложения стратегии. Я помню, как довольно долго спорил с ним о том, что действительно существует разница между Стратегией и Государством.
Мне нравится ваш пост, но вы можете добавить пояснение к шаблону, который вы описываете.