Без каких паттернов GoF вы не могли бы жить? - PullRequest
5 голосов
/ 31 января 2009

Если бы в будущем вы могли использовать только один из канонических паттернов, определенных в книге Банды четырех , какой из них вы бы выбрали и по какой причине?

Ответы [ 12 ]

21 голосов
/ 31 января 2009

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

Пользуется композицией объектов по наследованию классов.

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

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

3 голосов
/ 31 января 2009

Наблюдательский паттерн

3 голосов
/ 31 января 2009

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

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

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

2 голосов
/ 31 января 2009

Я бы сказал Шаблон декоратора . Главным образом потому, что он уже используется в фреймворках.

Например, если вы когда-нибудь писали такой код:

FileStream file = new FileStream("file.txt");
GZipStream compression = new GZipStream(file);
TextReader reader = new TextReader(compression);
reader.ReadAll();

Тогда вы использовали шаблон Decorator.

2 голосов
/ 31 января 2009

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

1 голос
/ 02 февраля 2009

Слушатель или наблюдатель шаблон.

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

Другие:

  1. Адаптер (это очень полезно, если вы не хотите касаться кода, который работает, но у вас нет времени, чтобы понять, как, или вы просто не знаете)
  2. Состояние
  3. Стратегия
1 голос
/ 31 января 2009

Мне нравится шаблон Visitor . Я неоднократно сталкивался с проблемой проектирования и не мог ее решить, пока, наконец, не обнаружил, что ответом является шаблон Visitor.

Вы можете добавить любую функциональность в класс, не меняя его! Просто добавьте туда функцию accept ().

1 голос
/ 31 января 2009

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

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

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

1 голос
/ 31 января 2009

Если бы у меня было на выбор, я бы пошел с картиной М.С.Эшера на передней обложке, чтобы поставить на стену. ;)

0 голосов
/ 02 февраля 2009

Я не могу жить без итератора. Я использую это ежедневно. Я вряд ли могу представить себе жизнь без нее :-) Мой второй самый используемый - это Decorator / Wrapper.

...