Книга Design Patterns обсуждает 23 разных шаблона, классифицированных по трем назначениям (все из них вращаются вокруг определенного аспекта, который может варьироваться). Эти три назначения:
-
Созидательная: как объект может быть создан. Часто это вовлекает изолирование деталей создания объекта, так что ваш код не зависит от типа объекта, и поэтому его не нужно менять, когда вы добавляете новый тип объекта. Вышеупомянутый Singleton классифицируется, как созидательный шаблон, и далее в этой книге вы увидите примеры производящих методов (Factory Metod) и Прототипов (Prototype).
-
Структурная: проектируйте объекты, чтобы они удовлетворяли определенным ограничениям проекта. Это позволяет работать, соединяя одни объекты с другими, гарантируя, что изменения в системе не потребуют изменения этих связей.
-
Поведенческая: объекты управляют определенными типами действий в программе. Это инкапсулирует процесс, который вы хотите выполнить, такой как интерпретирование языка, выполнение запроса, перемещение по последовательности (как в итераторе) или реализация алгоритма. Эта книга содержит примеры шаблонов Наблюдателя (Observer) и Посетителя (Visitor).
Книга Design Patterns содержит раздел на каждый из 23 шаблонов и один или несколько примеров в каждом разделе, обычно с использованием C++ (скорее ограниченные С++) но некоторые реализованы на Smalltalk. (Вы найдете, что это не имеет большого значения, так как вы легко можете перевести концепцию с этих язоков на Java.) Эта книга пересматривает многие шаблоны, рассмотренные в Design Patterns, но с использованием ориентации на Java, так как язык меняет выражение и понимание шаблона. Однако примеры GoF не будут повторены здесь, так как я верю, что можно привести более показательные примеры, дающие тот же объем. Цель состоит в обеспечении вас достаточным пониманием того, что такое шаблоны и почему они так важны.
Многолетние наблюдения за этими вещами привели к появлению мысли о том, что шаблоны сами по себе используют основные принципы организации, отличные (и более фундаментальные) оттого, что описано в Design Patterns. Эти принципы базируются на структуре реализации, которая была, как я заметил, очень похожа у разных шаблонов (больше, чем это показано в Design Patterns). Хотя мы в основном пытаемся избежать предпочтения реализации в виде интерфейсов, тем не менее, некоторое время я думал, что это облегчит понимание шаблонов в терминах этого структурного принципа, и пробовал перестроить книгу вокруг шаблонов, базирующихся на своей структуре, взамен категорийности, представленной в Design Patterns.
Однако позднее внутренняя интуиция подсказала мне, что полезней организовать шаблоны в терминах проблемы, которую они решают. Я верю, что это тонкое, но важное отличие от пути организации шаблонов Мецкера (Metsker), используемой в Design Patterns Java Workshop (Addison-Wesley 2002), и потому, я надеюсь, что вы в последствии будете способны распознать вашу проблему и найти решение, если шаблон будет организован этим способом.
В прецессе выполнения всей этой "переработки книги" я понял, что если я что-то поменял однажды, я вероятно поменяю это еще раз (это определяется правилами дизайна), так что я удалил все ссылки на порядковую нумерацию глав, чтобы облегчить такие изменения (небольшой шаблон "непронумерованных глав"J).
← | Принципы дизайна | Требования к разработке | → |