Какой самый интересный шаблон дизайна вы когда-либо встречали? - PullRequest
6 голосов
/ 20 сентября 2008

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

Но должно быть несколько необычных решений необычных проблем, и я хотел бы услышать об этом.

Ответы [ 10 ]

15 голосов
/ 20 сентября 2008

Crash Only Software: http://www.usenix.org/events/hotos03/tech/full_papers/candea/candea_html/ Аннотация

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

5 голосов
/ 20 сентября 2008

Это скорее анти-паттерн, но я видел то, что я называю паттерном "Держите все в одном месте". Это было большое приложение, где все переменные, которые не были локальными, для каждого класса, КАЖДОГО класса, хранились в одном классе с именем P (для параметров). Кроме того, все статические переменные были сохранены в классе под названием ... подождите ... S.

Во всяком случае, каким-то образом этот проект стал довольно большим, и вдруг ничего не получилось. (Меня наняли примерно в это время). Удивительно, но программа не вылетала, у нее было множество побочных эффектов, которые заставляли приложение работать некорректно. Как вы можете себе представить, несколько потоков, все обращаются к P и изменяют переменные, без блокировок или синхронизации.

Я говорю вам, это было действительно зрелище.

Компания открыла новый офис и наняла 3 человек для его обслуживания, я был одним из них. Нам дали программу и сказали исправить. Мы провели дни, сидя без дела, просто хлопая себя по лбу. Теперь у меня на лице отпечаток ладони.

Другие забавы ... переменная с именем "fudgeFactor". Все еще не знаю, что это сделало.

Способ получения следующего символа ascii ...

char getNextChar(char previous) {

switch (previous)
case 'a': return b;
case 'b': return c;
...
case 'z': return a;
}

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

4 голосов
/ 24 декабря 2008

В течение последнего года я занимался обслуживанием приложения для Windows, написанного на LANSA, где фокусировкой управляют, установив для всех элементов управления значение tabStop = false, за исключением двух скрытых кнопок (PrevFocus и NextFocus). Когда форма загружена, фокус устанавливается на поле, а имя этого поля сохраняется в переменной отслеживания (с именем «FocusField»). Когда пользователь вкладки (или Shift-вкладки), чтобы изменить фокус, запускается событие GotFocus соответствующей кнопки. Внутри этой функции находится оператор case (выберите case FocusField). Основываясь на текущем фокусированном поле, выполняется логика проверки и, возможно, фокус меняется на другое поле.

События GotFocus для большинства элементов управления проверяют текущее значение FocusField и затем вызывают функцию LostFocus, которая выполняет ту же инструкцию case для FocusField, так что ранее сфокусированное поле будет проверено.

Как вы, вероятно, можете догадаться, это делает невозможным отделение пользовательского интерфейса от логики и невероятную рутинную работу по обслуживанию. Переписывание этих форм для использования простого метода Validate, который проверяет ВСЕ входные данные и позволяет обычным свойствам вкладок (TabOrder, TabStop и т. Д.) Делать свое дело, обычно приводит к сокращению кода на 50% и значительно более надежным формам.

Я понятия не имею, откуда возник этот шаблон, хотя, возможно, его придумывали программисты RPG / green-screen, ставшие разработчиками WinForms, написавшими приложение.

2 голосов
/ 08 ноября 2012

Я помню, когда впервые прочитал о шаблоне веса в полете в GOF. В качестве примера они используют текстовый процессор; они указывают на недостатки использования независимого объекта для представления каждого символа. Шаблон «мухи» поощряет отделение разделяемого, внутреннего, неизменного состояния от неразделимого, внешнего, изменчивого состояния. Для меня в то время это был один из тех "Ага!" моменты, которые действительно расширили мои горизонты и повлияли на мои замыслы по сей день.

Мой друг предположил, что паттерн Стратегия по сути является паттерном прародителя. Многие из других шаблонов (Bridge, Decorator, Proxy, State, ...) являются просто более совершенными приложениями Стратегии. Я помню, как довольно долго спорил с ним, что между Стратегией и государством действительно есть разница.

2 голосов
/ 13 октября 2008

Не столько шаблон, сколько внедрение зависимостей и инверсия управления

2 голосов
/ 20 сентября 2008

Свободный интерфейс от Фаулера - довольно интересная модель. Я всегда испытывал слабость к абстрактным фабрикам, стратегиям и государственному образцу.

Если позволите, я недавно кодифицировал «шаблон», который я называю Шаблон класса друга , который некоторые могут найти интересным или полезным для ограничения видимости средств доступа к частным полям в языках, не имеющих C ++ в стиле друзей.

2 голосов
/ 20 сентября 2008

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

Помимо mvc (который сам по себе не является pattenr), он является "королем шаблонов" в отношении его сложности и потенциала для решения проблем.

1 голос
/ 20 сентября 2008

Нет, речь идет о книгах DP, а эта тема о конкретных шаблонах.

Переводчик и Flyweight приходят на ум из «Банды 4 книг».

Я считаю мощные и глубокие паттерны Bridge и Mediator в наборе инструментов разработчика SW.

0 голосов
/ 20 сентября 2008

Я никогда не видел смысла в шаблоне Visitor, пока мне не пришлось напрямую манипулировать байт-кодом Java с помощью библиотеки ASM . Удивительно, насколько шаблон упростил то, что в противном случае было бы действительно сложной задачей.

Шаблон также используется в большинстве Java IDE, когда вы хотите написать свой собственный плагин рефакторинга. Вы предоставляете объект Visitor, и он передается вокруг AST для внесения любых необходимых изменений.

0 голосов
/ 20 сентября 2008

Самый интересный шаблон дизайна, который вы когда-либо встречали, - это тот, который вы создали сами по понятным причинам.

Это не значит, что это будет лучший шаблон дизайна, просто самый интересный.

...