107
6.1.5.6. GoF-паттерны
Все GoF-паттерны в зависимости от предназначения для три группы:
1. порождающие паттерны (Creational Patterns - 5) – предназначены для создания
объектов в системе: фабричный метод (Factory Method - 5), абстрактная фабрика
(Abstract Factory - 5), одиночка (Singleton - 4), прототип (Prototype - 3), строитель
(Builder - 2);
2. структурные паттерны (Structural Patterns - 7) – предназначены для определения
правил, по которым из объектов (классов и экземпляров) образуются более крупные
структуры: фасад (Facade - 5), адаптер (Adapter - 4), заместитель (Proxy - 4),
компоновщик (Composite - 4), мост (Bridge - 3), декоратор (Decorator - 3),
приспособленец (Flyweight - 1);
3. паттерны поведения (Behavioral Patterns - 11) предназначены для распределения
обязанностей между объектами и передачи управления в системе: итератор (Iterator -
5), наблюдатель (Observer - 5), команда (Command - 4), стратегия (Strategy - 4),
состояние (State - 3), шаблонный метод (Template Method - 3), посредник (Mediator -
2), цепочка обязанностей (Chain of Responsibility - 2), интерпретатор (Interpreter - 1),
посетитель (Visitor - 1), хранитель (Memento - 1).
Порождающие паттерны позволяют распределить обязанности по созданию
экземпляров. В целом порождающие паттерны позволяют ответить на вопросы: что
создается, кто это создает, когда и как?
1. фабричный метод (Factory Method) определяет интерфейс для создания объектов;
2. абстрактная фабрика (Abstract Factory) предоставляет интерфейс для создания
семейств, связанных между собой или независимых объектов. Шаблон позволяет
определить общий каркас приложения, а затем сосредоточиться на реализации
функциональности отдельных частей независимо от остальных компонентов
приложения;
3. одиночка (Singleton) гарантирует получение строго одного экземпляра заданного
класса;
4. прототип (Prototype) описывает виды создаваемых объектов с помощью прототипа и
создает новые объекты путем его копирования. Prototype позволяет сгенерировать
копию готового к использованию объекта, поля которого имеют определенные
значения, установленные конструктором.
5. строитель (Builder) упрощает создание сложных объектов путем определения класса,
предназначенного для построения экземпляров другого класса. Это бывает
необходимо, когда при создании объекта требуется соблюдение определенной
последовательности операций. Builder вводит объект более высокого уровня
иерархии, который может координировать создание (получение) всех необходимых
ресурсов (например, из БД), проверять их корректность и обеспечивать стратегию
восстановления при возникновении ошибки.
Рассмотрим один из наиболее популярных порождающих паттернов: фабричный
метод (Factory Method).
Паттерн Фабричный метод (Factory Method) определяет интерфейс для создания
объекта, без использования конструктора, позволяя подклассам самостоятельно решать
какой именно объект создавать. Поскольку Фабричный метод позволяет назначить классам
ответственность за создание подклассов, проектировщик освобождается от необходимости
встраивать в код зависящие от приложения классы.