Читаем Журнал PC Magazine/Russian Edition #01/2009 полностью

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

«Порождающие шаблоны». В этой группе собраны паттерны, описывающие разные способы создания объектов. Прежде всего это «Фабричный метод» (Factory Method), прием определения интерфейса создания объектов, при этом выбранный класс воплощается в подклассах. Шаблон «Абстрактная фабрика» (Abstract Factory) определяет интерфейс для создания семейств, связанных между собой или независимых объектов, конкретные классы которых неизвестны. С помощью шаблона «Строитель» (Builder) можно отделить процесс конструирования сложного объекта от его конкретного представления и при этом использовать один и тот же процесс для создания различных представлений. «Прототип» (Prototype) описывает виды разрабатываемых объектов с помощью прототипа и создает новые путем его копирования. Применение шаблона «Одиночка» (Singleton) гарантирует, что некоторый класс может иметь только один экземпляр (и предоставляет глобальную точку доступа к нему).

«Структурные паттерны». В этой группе собраны паттерны, которые позволяют менять структуру взаимодействия классов. «Адаптер» (Adapter) позволяет адаптировать интерфейс класса к конкретной ситуации, средствами шаблона «Мост» (Bridge) можно отделить интерфейс класса и его реализацию, «Компоновщик» (Composite) объединяет объекты в древовидную структуру для представления иерархии от частного к целому. Компоновщик позволяет клиентам единообразно обращаться к отдельным объектам и группам объектов. Паттерн «Оформитель» (Decorator, также известен как Wrapper, «Оболочка») позволяет динамически добавлять новое поведение к объекту, «Фасад» (Facade) – скрыть сложность системы путем сведения всех возможных внешних вызовов к одному объекту, делегирующему их соответствующим объектам системы. Шаблон «Приспособленец» (Flyweight) используется для облегчения работы с большим числом мелких объектов, а «Заместитель» (Proxy) – контролировать доступ к объекту, перехватывая все вызовы к нему.

В группе «Паттерны поведения» собраны шаблоны, ответственные за реализацию поведения объектов. «Цепочка ответов» (Chain of Response) позволяет пропустить запрос через цепочку объектов, «Команда» (Command) инкапсулирует команду в объект, «Интерпретатор» (Interpreter) позволяет создать общее декларативное решение для часто изменяющихся условий задачи. В шаблоне «Итератор» (Iterator) организуется последовательный доступ к коллекции, «Посредник» (Mediator) определяет упрощенный механизм взаимодействия классов, «Напоминание» (Memento) задает принципы, позволяющие записывать и восстанавливать внутреннее состояние объекта. Средствами шаблона «Наблюдатель» (Observer) можно оповещать об изменениях множества объектов, «Состояние» (State) – менять поведение объекта при изменении его состояния. «Стратегия» (Strategy) инкапсулирует алгоритм внутри класса.

Паттерн «Шаблонный метод» (Template Method) выделяет конкретные шаги в алгоритме и опирается на подклассы для их реализации. Средствами паттерна «Посетитель» (Visitor) в класс добавляются новые операции без его изменения.

В этой статье мы рассмотрим паттерны из первой группы – «Порождающие паттерны».

«Фабричный метод»

Паттерн Factory Method позволяет реализовать идею «виртуального конструктора», то есть создания объектов без явного указания их типа. Обычно он применяется, когда базовый класс делегирует потомкам право принятия решений о типе создаваемого объекта. Предположим, что нам надо написать программу для сохранения документа на диск, причем в разных форматах: XML, txt, doc и даже бинарном. Создадим базовый класс, где будет код открытия файла и фабричный метод для создания конкретного объекта, который будет сохранять данные в этот файл.

class DocumentWriter

{

public: virtual void writeDoc(const Document& doc, FILE& file) = 0;

};

class SaveDocument

{

protected:

virtual DocumentFileWriter* createDocumentWriter const = 0;

public:

void save(const char* fileName)

{

FILE file = openFile(fileName);

// Фабричный метод

DocumentFileWriter* writer = createDocumentWriter;

writer->writeDoc;

closeFile(file);

}

};

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

Перейти на страницу:

Похожие книги

Где твоя волшебная кнопка? Как развивать эмоциональный интеллект
Где твоя волшебная кнопка? Как развивать эмоциональный интеллект

Понимание эмоций и управление эмоциями играют ведущую роль в нашей жизни и успешности. А влияние на эмоции коллег и партнеров определяет достижения в бизнесе. Эмоциональный интеллект начинает занимать лидирующее положение в ряду навыков, которыми должен обладать и которые развивает любой человек, стремящийся получить высокие результаты. В книге используется множество приемов, упражнений и заданий, применив которые вы сможете направить силу эмоций на достижение успеха в своих делах.Из книги вы узнаете:– почему интерес и страх – главные эмоции в жизни человека;– что в рекламе видят женщины, а что мужчины;– на какие эмоции опираются успешные люди;– как эмоции направляют финансовые потоки.Авторы книги утверждают, что в современном мире успешный человек должен уметь развивать и поддерживать свой эмоциональный интеллект. Книга предназначена для бизнес-тренеров, студентов старших курсов, а также заинтересованных лиц.

Елена Анатольевна Хлевная , Л. Южанинова

Психология и психотерапия / Прочая компьютерная литература / Книги по IT